2017-12-27 9 views
0

私はオブジェクトに変換したい配列を持っています。例えば:私は結果になりたいRamdajs keyBy相当のlodash

const arr = [{id: 1, key: ''}, {id: 2, key: ''}]; 

lodash

const object = { 1: {id: 1, key: ''}, 2: { id: 2, key: ''}} 

私はkeyBy関数を使用することができますが、私はramdaで働いているし、そこにこの機能を見つけることができませんでした。

+0

[groupBy](https://lodash.com/docs/4.17.4#groupBy)のようなものでしょうか。 – elclanrs

答えて

1

あなたは非常に基本的な軽減機能でこれを解決することができます。

function keyBy(entities, id = "id") { 
    entities.reduce((acc, entity) => { 
     acc[entity[id]] = entity; 
     return acc; 
    }, {}); 
} 
0

私はRAMDAでこれを得ることができる最もエレガントな方法:

const arr = [{id: 1, key: '1'}, {id: 2, key: '1'}, {id: 2, key: '2'}]; 
const reduceToIds = R.reduceBy(R.nthArg(1), [], R.prop('id')); 

reduceToIds(arr); 

はREPL http://ramdajs.com/repl/#?const%20arr%20%3D%20%5B%7Bid%3A%201%2C%20key%3A%20%271%27%7D%2C%20%7Bid%3A%202%2C%20key%3A%20%271%27%7D%2C%20%7Bid%3A%202%2C%20key%3A%20%272%27%7D%5D%3B%0Aconst%20reduceToIds%20%3D%20R.reduceBy%28R.nthArg%281%29%2C%20%5B%5D%2C%20R.prop%28%27id%27%29%29%3B%0A%0AreduceToIds%28arr%29%3B

+0

'R.nthArg'と' R.prop'でより洗練された答えを更新しました。 – Bsalex