在这个问题中,我理解发生的大部分事情: 函数countBy接受任意一组可迭代项(列表,对象,数组),然后按给定的groupName对它们进行排序 - 下面的console.log'd是一个函数,根据它是否为true或false来命名它们。是的,它们大于2 ..但是,我不理解和寻求的是,当name属性最初被推送到数组中的每个对象时,它们的值是继承的吗?我看到了推送了name属性,但没有看到隐式定义的groupName。你呢?它是对象属性的某种默认行为吗?
function countBy(items, groupName) {
let counts = [];
for (let item of items) {
let name = groupName(item);
let known = counts.findIndex(c => c.name == name);
if (known == -1) {
counts.push({name, count: 1});
} else {
counts[known].count++;
}
}
return counts;
}
console.log(countBy([1, 2, 3, 4, 5], n => n > 2));
// → [{name: false, count: 2}, {name: true, count: 3}]