Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript reduce initialValue是空对象,什么';这是什么意思?_Javascript - Fatal编程技术网

Javascript reduce initialValue是空对象,什么';这是什么意思?

Javascript reduce initialValue是空对象,什么';这是什么意思?,javascript,Javascript,在MDN中,allNames[name]的含义是什么allNames首先应该是{},但如果对象为空,allNames[name]=1等于{}['Alice']=1?它怎么会变成{'Alice':1},, 我很困惑 Counting instances of values in an object var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; var countedNames = names.reduce(function (a

在MDN中,
allNames[name]
的含义是什么
allNames
首先应该是
{}
,但如果对象为空,
allNames[name]=1
等于
{}['Alice']=1
?它怎么会变成
{'Alice':1}
,, 我很困惑

Counting instances of values in an object

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 }

上面的reduce函数可以重写为以下函数

这个简化的版本显示我们正在通过增加
名称
的值来修改结果(从
{}
开始)

如果
result[item]
未定义,则使用零

const name=['Alice'、'Bob'、'Tiff'、'Bruce'、'Alice'];
const frequencyMap=(项目)=>items.reduce((结果,项目)=>
({…结果,[项目]:(结果[项目]| 0)+1}),{});
console.log(frequencyMap(name))

.as控制台包装{top:0;最大高度:100%!important;}
来自您提供的文档:

reducer函数有四个参数: 蓄能器(acc) 当前值(cur) 当前索引(idx) 源阵列(src)

因此,第一个变量是累加器,这个变量将保存最终要计算的累积值,就像在本例中累加名称一样。

是一个聚合或累加器函数。这意味着它接受一组项目(
名称
),并将其归结为一个“累计”值(
所有名称

names.reduce(函数(allNames,name){/`allNames`是累积值,`name`是`names'中的当前项`
如果(所有名称中的名称){
所有名称[名称]+;
}
否则{
所有名称[名称]=1;
}
返回所有名称;
}, {}); // 这里的空对象是累积值的初始值
因此,此函数创建一个累积值,该值是一个对象,其键对应于
名称
中的每个名称,值对应于
名称
中该
名称
的频率

最后:请注意,对象具有用于属性访问/创建的索引符号(非常类似于数组!)。因此,下面的意思是“如果对象
allNames
上还不存在这样的属性,则使用变量
name
的值创建一个属性,并将值
1
分配给它的值:

allNames[name] = 1

初始对象是您开始使用的对象和返回的对象。
allNames[name]=1
name
的内容作为新属性添加到
allNames
中,并立即将值
1
存储在新添加的属性->您能为您正在谈论的MDN页面提供链接吗?它看起来像是allNames[name]是一个控制变量,用于计算找到名称的次数。这是reduce、arr.reduce(callback(accumulator、currentValue、[、index[、array]])[、initialValue])的语法,当数组为空时,不能执行任何reduce操作。请将其分解。
{}['Alice
]=1
{}是空对象。
['Alice']
获取或设置该对象上名为“Alice”的属性(在本例中,由于
=1
,因此它是设置的)。
=1
将属性设置为1。因此,该操作的结果是Alice属性等于1的对象,或
{Alice:1}
。谢谢,你说得对!我知道是什么,应该是括号符号。