【发布时间】:2020-06-08 05:28:35
【问题描述】:
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], n => n > 2));
// → [{name: false, count: 2}, {name: true, count: 1}]
在 item 为 3 的第三次迭代中,我会认为 name 的值为 true(这是正确的)并且 known 为 0。(因为 counts = [name = false, count: 2] 因此 findindex of "name " 是 0) 但实际上已知 = -1 。
你能解释一下为什么 known= -1 (这意味着没有找到元素,但根据我的想法“name”是在 [name = false, count: 2] 找到的。)
非常感谢您提前考虑和考虑!!!
【问题讨论】:
-
再次检查。您刚才说在第三次迭代中,
name的值是true(这是正确的)。然后稍后您声称known应该为0,但实际情况是counts = [{name: false, count: 2}]在那个点上不包含name: true的元素,这是在counts.findIndex()调用中搜索到的name的值。
标签: javascript