2017-12-27 794 views
0

我有一個數組,我想轉換成一個對象。例如:Ramdajs keyBy相當於lodash

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

我想要得到的結果是:

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

隨着lodash我可以使用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.nthAr''和'R.prop'更新了答案,使它更加優雅。 – Bsalex