Javascript - 减少对象
在Chrome控制台中执行以下代码 - 用于Google页面。Javascript - 减少对象
[].slice.call(document.querySelectorAll("input"))
.map(el => el.name?el.name:el.id)
我看到了这个输出。
我想这个名单减少到一个对象。
.reduce((acc,el) => acc[el] = el.toUpperCase(), {});
我希望类似下面...
{
"sclient":"SCLIENT",
"site":"SITE",
...
}
但只返回最后一个元素。
什么是错的这个减少的功能?
你回来了acc[el] = el.toUpperCase()
,它将返回el.toUpperCase()
的值。换句话说,你每次迭代都要返回一个新的字符串。您需要退回您的累加器(acc):
.reduce((acc,el) => {
acc[el] = el.toUpperCase();
return acc;
}, {});
让我知道如果您有任何问题。
'(acc,el)=>(acc [el] = el.toUpperCase(),acc)'也可以。 – 4castle
如果为虚拟形象注册并不合适,我会这样做。 –
如果你是单行游戏的忠实粉丝,并且浏览器支持是你最担心的问题,那么可以使用Object.assign(ES6)。
.reduce((acc,el) => Object.assign(acc, {[el]: el.toUpperCase()}), {});
Object.assign
接受一个对象作为第一个参数,并返回非常相同的对象(全等)。
请注意[el]
作为对象键 - a computed property(ES6)。
回调函数需要返回'acc'。 – 4castle
Thanks @ 4castle ... – KitKarson