Javascript reduce initialValue是空对象,什么';这是什么意思?
在MDN中,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
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}
。谢谢,你说得对!我知道是什么,应该是括号符号。