有人可以详细说明一下此代码段

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, {});

09-25 18:31