Javascript - 减少对象

Javascript - 减少对象

问题描述:

在Chrome控制台中执行以下代码 - 用于Google页面。Javascript - 减少对象

[].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

什么是错的这个减少的功能?

+4

回调函数需要返回'acc'。 – 4castle

+0

Thanks @ 4castle ... – KitKarson

你回来了acc[el] = el.toUpperCase(),它将返回el.toUpperCase()的值。换句话说,你每次迭代都要返回一个新的字符串。您需要退回您的累加器(acc):

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

让我知道如果您有任何问题。

+0

'(acc,el)=>(acc [el] = el.toUpperCase(),acc)'也可以。 – 4castle

+0

如果为虚拟形象注册并不合适,我会这样做。 –

如果你是单行游戏的忠实粉丝,并且浏览器支持是你最担心的问题,那么可以使用Object.assign(ES6)。

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

Object.assign接受一个对象作为第一个参数,并返回非常相同的对象(全等)。

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