有人可以详细说明一下此代码段
var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var countedNames = names.reduce(function (allNames, name) {
if (name in allNames) {
allNames[name]++;
} else {
allNames[name] = 1;
}
return allNames;
}, {});
请说明回调函数如何获取数组名称并给出答案
countedNames is:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
最佳答案
这定义并排列了5个元素
var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
为了便于说明,我们分别定义函数
此函数采用两个参数
(allNames, name)
。该函数返回的结果在每次迭代时都会添加到allNames
中。var myFunc = function (allNames, name) {
如果
allNames
已经包含name
,请增加其值 if (name in allNames) {
allNames[name]++;
}
否则,添加
name
作为键,并将其值设置为等于1
else {
allNames[name] = 1;
}
从此函数返回
allNames
,因此reduce可以将其作为allNames
传递给下一个迭代 return allNames;
}
这会将
.reduce()
的结果分配给countedNames
,并且{}
是初始值var countedNames = names.reduce(myFunc, {});