【发布时间】:2019-08-11 20:56:18
【问题描述】:
请解释代码并详细说明代码背后的运行情况。
我对 if 部分 if(! acc[key]) 感到困惑。是不是表示如果key不在acc中,用value数组设置key,跳出if语句,将obj压入acc键值?
如果 key 在 acc 中,则跳过 if 语句并使用另一个内存 acc[key] 并设置 acc 中的 key 并使用 obj 设置值。
我的解释正确吗?
var people = [{
name: 'Alice',
age: 21
},
{
name: 'Max',
age: 20
},
{
name: 'Jane',
age: 20
}
];
function groupBy(objectArray, property) {
return objectArray.reduce(function(acc, obj) {
var key = obj[property];
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(obj)
return acc;
}, {});
}
var groupedPeople = groupBy(people, 'age')
console.log(JSON.stringify(groupedPeople))
【问题讨论】:
-
这里的代码不太行;无论它是否是第一个成员,您都应该推入分组对象(将
acc[key].push(obj)移出条件块)。 -
感谢我从我的练习代码中复制了它,所以我忘了更改代码。
标签: javascript square-bracket array-reduce