Javascript-简化为对象
在chrome控制台中执行以下代码-用于google页面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(), {}); 我期待下面这样的事情
[].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()}), {});