Javascript Array.prototype.reduce()减少了signe nubmer而不是object

Xip*_*ipo 4 javascript reduce

我正在Chrome控制台上测试方法的原型,并获得有关Array.prototype.reduce()的意外结果

例如,下面的示例

let a = [["a",1],["b",1],["c",1]];

let result = a.reduce((acc, e) => acc[e[0]]=e[1], {});
Run Code Online (Sandbox Code Playgroud)

我期望得到的结果是

{
  "a": 1,
  "b": 1,
  "c": 1
}
Run Code Online (Sandbox Code Playgroud)

但我得到的值是1

Nen*_*car 5

您还需要在每次迭代中返回累加器.

let a = [["a",1],["c",1],["d",1]];

let result = a.reduce((acc, e) => (acc[e[0]]=e[1], acc), {});
console.log(result)
Run Code Online (Sandbox Code Playgroud)

您还可以在第二个参数上使用解构赋值来获取每个数组的第一个和第二个元素.

let a = [["a",1],["c",1],["d",1]];

let result = a.reduce((acc, [a, b]) => (acc[a] = b, acc), {});
console.log(result)
Run Code Online (Sandbox Code Playgroud)

  • @ sp00m:这是逗号运算符.计算左侧操作数,然后计算右侧操作数,然后逗号表达式的结果是该右侧的结果.Nenad不得不在它周围加上`()`所以整个表达式都是箭头函数的主体.(就个人而言,更喜欢你的版本与`{}`.) (3认同)