我正在 Chrome控制台上测试方法的原型,并获得有关 Array.prototype.reduce()
的意外结果例如下面的例子
{
"a": 1,
"b": 1,
"c": 1
}
我期望得到的结果是
{{1}}
但我得到的值 1
答案 0 :(得分:5)
您还需要在每次迭代中返回累加器。
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)
答案 1 :(得分:3)
因为您需要从回调中返回累积的对象:
let result = a.reduce((acc, e) => {
acc[e[0]] = e[1];
return acc;
}, {});
答案 2 :(得分:3)
虽然可以使用reduce
来实现这一点(see sp00m's answer),但它并不合适,并且很容易忘记从acc
返回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]);
的一个案例:
@using (Html.BeginForm("Method", "Controller", FormMethod.Get))
{
<input type="datetime" name="date" placeholder="Type the date"/>
<button type="submit" class="btn btn-default">
Submit
</button>
}
答案 3 :(得分:0)
您应该将代码更改为:
let result = a.reduce((acc, e) => {acc[el[0]]=e[1]; return acc}, {});
为什么:
acc[e[0]]=e[1] //this returns 1 not the acc