let inputArr = [{
"gender": "MALE",
"name": "A",
"age": 20
},
{
"gender": "MALE",
"name": "B",
"age": 12
},
{
"gender": "FEMALE",
"name": "C",
"age": 16
},
{
"gender": "MALE",
"name": "D",
"age": 21
},
{
"gender": "FEMALE",
"name": "E",
"age": 30
}
]
console.log(JSON.stringify(inputArr.reduce((acc, ele) => {
if (acc[ele["gender"]]) {
acc[ele.gender].members.push(ele);
} else {
acc[ele["gender"]] = {
members: []
}
}
return acc;
}, {})))
我正在嘗試根據性別對用戶進行分組,使用Array.reduce但輸出未顯示陣列中包含的所有記錄,我無法理解此處的問題
uj5u.com熱心網友回復:
您的減速器在第一次遇到性別時不會推送該元素,因此您的結果中缺少每個性別的第一個用戶
let inputArr = [{"gender": "MALE","name": "A","age": 20},{"gender": "MALE","name": "B","age": 12},{"gender": "FEMALE","name": "C","age": 16},{"gender": "MALE","name": "D","age": 21},{"gender": "FEMALE","name": "E","age": 30}]
console.log(JSON.stringify(inputArr.reduce((acc, ele) => {
if (acc[ele["gender"]]) {
acc[ele.gender].members.push(ele);
} else {
acc[ele["gender"]] = {
members: [ele] // initialise the array with the current user
}
}
return acc;
}, {})))
uj5u.com熱心網友回復:
另一種解決方案,但如果性能很重要,我不建議這樣做。
let inputArr = [{
"gender": "MALE",
"name": "A",
"age": 20
},
{
"gender": "MALE",
"name": "B",
"age": 12
},
{
"gender": "FEMALE",
"name": "C",
"age": 16
},
{
"gender": "MALE",
"name": "D",
"age": 21
},
{
"gender": "FEMALE",
"name": "E",
"age": 30
}
]
function groupBy(array, field) {
return array.reduce((acc, item) => ({
...acc,
[item[field]]: [...acc[item[field]] || [], item]
}), {})
}
console.log(groupBy(inputArr, "gender"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/375422.html
標籤:javascript
