Javascript Array.prototype.reduce() 减少符号数而不是对象

Javascript Array.prototype.reduce() reduces in signe nubmer instead of object

我正在 Chrome 控制台 上测试一个方法的原型,并得到关于 Array.prototype.reduce()[ 的意外结果=26=]

例如下面的例子

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

let result = a.reduce((acc, e) => acc[e[0]]=e[1], {});

我期望的结果是

{
  "a": 1,
  "b": 1,
  "c": 1
}

但我得到的值是 1

你还需要在每次迭代中return累加器。

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

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

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

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

let result = a.reduce((acc, [a, b]) => (acc[a] = b, acc), {});
console.log(result)

因为你需要return回调中的累积对象:

let result = a.reduce((acc, e) => {
  acc[e[0]] = e[1];
  return acc;
}, {});

您应该将代码更改为:

let result = a.reduce((acc, e) => {acc[el[0]]=e[1]; return acc}, {});

为什么:

acc[e[0]]=e[1] //this returns 1 not the acc

虽然您可以为此使用 reduce (),但它不是很合适,而且很笨重,很容易被遗忘 return acc 每次都来自回调。 (在你的例子中,因为你没有使用简洁的箭头,你在每个阶段 returning acc[e[0]] = e[1] 的结果。)reduce 在累加器 在减少的过程中发生了变化

这真的只是 forEach 的一个案例:

let a = [["a",1],["b",1],["c",1]];
let result = {};
a.forEach(e => result[e[0]] = e[1]);