在Chrome控制台中执行以下代码 - 适用于google页面。
[].slice.call(document.querySelectorAll("input"))
.map(el => el.name?el.name:el.id)
我看到了这个输出。
我想将此列表缩减为对象。
.reduce((acc,el) => acc[el] = el.toUpperCase(), {});
我期待下面的内容......
{
"sclient":"SCLIENT",
"site":"SITE",
...
}
但它只返回最后一个元素。
这个减少功能有什么问题?
答案 0 :(得分:2)
您返回acc[el] = el.toUpperCase()
,这将返回el.toUpperCase()
的值。换句话说,您每次迭代都会返回一个新字符串。您需要返回累加器(acc):
.reduce((acc,el) => {
acc[el] = el.toUpperCase();
return acc;
}, {});
如果您有任何问题,请告诉我。
答案 1 :(得分:0)
如果您是单线游戏的忠实粉丝并且浏览器支持是您最不关心的问题,则可以使用Object.assign(ES6)。
.reduce( (acc,el) => Object.assign(acc, {[el]: el.toUpperCase()}), {});
Object.assign
将一个对象作为第一个参数,并返回相同的对象(严格相等)。
请注意[el]
作为对象键 - computed property(ES6)。