Javascript - 缩减为对象

时间:2017-03-31 20:05:00

标签: javascript reduce

在Chrome控制台中执行以下代码 - 适用于google页面。

[].slice.call(document.querySelectorAll("input"))
                       .map(el => el.name?el.name:el.id)

我看到了这个输出。

enter image description here

我想将此列表缩减为对象。

         .reduce((acc,el) => acc[el] = el.toUpperCase(), {});

我期待下面的内容......

            {
                "sclient":"SCLIENT",
                "site":"SITE",
                ...
            }

但它只返回最后一个元素。

enter image description here

这个减少功能有什么问题?

2 个答案:

答案 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)。