Javascript-简化为对象

Javascript-简化为对象,javascript,reduce,Javascript,Reduce,在chrome控制台中执行以下代码-用于google页面 [].slice.call(document.querySelectorAll("input")) .map(el => el.name?el.name:el.id) 我看到了这个输出 我想把这个列表简化成一个对象 .reduce((acc,el) => acc[el] = el.toUpperCase(), {}); 我期待下面这样的事情

在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",
                ...
            }
但它只返回最后一个元素


这个reduce函数有什么问题?

您返回的是
acc[el]=el.toUpperCase()
,它将返回
el.toUpperCase()
的值。换句话说,每次迭代都返回一个新字符串。您需要退回蓄电池(acc):


如果您有任何问题,请告诉我。

您正在返回
acc[el]=el.toUpperCase()
,它将返回
el.toUpperCase()的值。
。换句话说,每次迭代都返回一个新字符串。您需要退回蓄电池(acc):


如果您有任何问题,请告诉我。

如果您非常喜欢一行程序,并且浏览器支持是您最不关心的问题,您可以使用(ES6)

Object.assign
将对象作为第一个参数,并返回完全相同的对象(严格相等)


请注意
[el]
作为对象键-a(ES6)。

如果您非常喜欢单行程序,并且浏览器支持是您最不关心的问题,那么您可以使用(ES6)

Object.assign
将对象作为第一个参数,并返回完全相同的对象(严格相等)


注意
[el]
作为对象键-a(ES6)。

回调函数需要返回
acc
。感谢@4castle…回调函数需要返回
acc
。感谢@4castle…
(acc,el)=>(acc[el]=el.toUpperCase(),acc)
。如果投票给化身不是不合适的话,我会这么做。
(acc,el)=>(acc[el]=el.toUpperCase(),acc)
也可以。如果投票给阿凡达不是不合适的话,我会这么做。
.reduce((acc,el) => {
   acc[el] = el.toUpperCase();
   return acc;
}, {});
.reduce( (acc,el) => Object.assign(acc, {[el]: el.toUpperCase()}), {});