首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mdn中约简实例的解释

mdn中约简实例的解释
EN

Stack Overflow用户
提问于 2018-05-10 19:08:24
回答 2查看 213关注 0票数 0

有谁能详细解释一下这个片段吗?

代码语言:javascript
复制
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;
}, {}); 

请解释回调函数如何接受数组名称并给出答案。

代码语言:javascript
复制
countedNames is:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-10 19:22:28

这定义并使用5个元素进行数组。

代码语言:javascript
复制
var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

为了便于解释,让我们分别定义函数

该函数采用两个参数(allNames, name)。无论此函数返回什么,都会在每次迭代时添加到allNames中。

代码语言:javascript
复制
var myFunc = function (allNames, name) {

如果allNames已经包含了name,那么增加它的值

代码语言:javascript
复制
   if (name in allNames) {
        allNames[name]++;
    }

否则,将name添加为键并将其值设置为1

代码语言:javascript
复制
    else {
        allNames[name] = 1;
    }

从这个函数中返回allNames,所以减少可以将它作为allNames下一次迭代传递

代码语言:javascript
复制
   return allNames;
}

这将.reduce()的结果分配给countedNames{}是初始值。

代码语言:javascript
复制
var countedNames = names.reduce(myFunc, {}); 
票数 1
EN

Stack Overflow用户

发布于 2018-05-10 19:16:26

为了使它更清楚,下面是从函数式转换到过程式的相同代码

代码语言:javascript
复制
const names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

const countedNames = {};
for (let i = 0; i < names.length; i++) {
  let name = names[i];
  // if exists increment, else set to 1
  if (countedNames[name] != null) {
    countedNames[name]++;
  } else {
    countedNames[name] = 1;
  }
}

console.log(countedNames);

在“约简”中,{}是初始值,然后通过约简函数运行数组的每个元素,以修改最终值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50279918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档