我想使用數組減少按鍵組合我的數組中的項目。es6陣列減少處理第一個項目正在減少
當我使用groupByIDErr
功能下面我得到obj[item[key]] is not iterable
所以得到它的工作我使用groupByID
功能,有一個未定義的檢查,如下圖所示。
數組是否有更好的方法來處理這個問題?我在這裏完成的工作對我提供的例子來說工作正常,但是當我必須減少更復雜的數組時,我發現維護起來很困難。
function groupByIDErr(arr,key){
return arr.reduce((obj, item) => {
return {
...obj,
[item[key]]: [
...obj[item[key]],
item
]
}
}, {})
}
function groupByID(arr,key){
return arr.reduce((obj, item) => {
return {
...obj,
[item[key]]: obj[item[key]] !== undefined ? [
...obj[item[key]],
item
]:[item]
}
}, {})
}
const people = [
{gender:'male', name: 'Tom'},
{gender:'male', name: 'Richard'},
{gender:'male', name: 'Harry'},
{gender:'female', name: 'Sarah'},
{gender:'female', name: 'Kate'}
]
console.log(groupByID(people,'gender'))
'arr.reduce(( obj,item,index)'...檢查索引是否爲0,並更改邏輯以適合 –
感謝@JaromandaX它看起來好像我甚至不需要更改邏輯,只需將'index'添加到'groupByIDErr '並且按預期工作 – ak85
@ ak85如果您自己解決了您的問題,請將您的解決方案發布在答案中並接受答案,以便其他人可以從您如何解決問題中獲益。 – 4castle