JS专家能给我解释一下这个if条件逻辑数组的reduce方法吗?
Can JS experts explain me this if conditional logic array reduce method?
我没有在 if 条件下写入逻辑,我试图控制台记录 typeof acc,但它是未定义的
let people = [
{ name: 'Alice', age: 21 },
{ name: 'Max', age: 20 },
{ name: 'Jane', age: 20 }
];
function groupBy(objectArray, property) {
return objectArray.reduce(function (acc, obj) {
let key = obj[property]
if (!acc[key]) {
acc[key] = []
}
acc[key].push(obj)
return acc
}, {})
}
let groupedPeople = groupBy(people, 'age')
// groupedPeople is:
// {
// 20: [
// { name: 'Max', age: 20 },
// { name: 'Jane', age: 20 }
// ],
// 21: [{ name: 'Alice', age: 21 }]
// }
reduce
正在按某个 属性 分组。这涉及在每个分组键控的对象中创建数组,并将项目推入数组。如果某个特定项目是在迭代过程中遇到的其组中的第一个成员,则在要推送到的键处还没有数组。于是--
if (!acc[key]) {
acc[key] = []
}
-- 检查是否有可用的数组用于推送到的键。如果没有,那么它将在要添加的组成员的键处添加一个数组。因此,此 if
条件只会对每个组评估为 true
一次——第一次遇到该组的成员。
我没有在 if 条件下写入逻辑,我试图控制台记录 typeof acc,但它是未定义的
let people = [
{ name: 'Alice', age: 21 },
{ name: 'Max', age: 20 },
{ name: 'Jane', age: 20 }
];
function groupBy(objectArray, property) {
return objectArray.reduce(function (acc, obj) {
let key = obj[property]
if (!acc[key]) {
acc[key] = []
}
acc[key].push(obj)
return acc
}, {})
}
let groupedPeople = groupBy(people, 'age')
// groupedPeople is:
// {
// 20: [
// { name: 'Max', age: 20 },
// { name: 'Jane', age: 20 }
// ],
// 21: [{ name: 'Alice', age: 21 }]
// }
reduce
正在按某个 属性 分组。这涉及在每个分组键控的对象中创建数组,并将项目推入数组。如果某个特定项目是在迭代过程中遇到的其组中的第一个成员,则在要推送到的键处还没有数组。于是--
if (!acc[key]) {
acc[key] = []
}
-- 检查是否有可用的数组用于推送到的键。如果没有,那么它将在要添加的组成员的键处添加一个数组。因此,此 if
条件只会对每个组评估为 true
一次——第一次遇到该组的成员。