将对象数组减少为对象[重复]

Posted

技术标签:

【中文标题】将对象数组减少为对象[重复]【英文标题】:Reduce array of objects into object [duplicate] 【发布时间】:2017-08-17 21:44:49 【问题描述】:

我有以下数组

data = [
   name: 'foo', type: 'fizz', val: 9 ,
   name: 'boo', type: 'buzz', val: 3 ,
   name: 'bar', type: 'fizz', val: 4 ,
   name: 'car', type: 'buzz', val: 7 ,
];

我是怎么做到的


    9: 'foo',
    3: 'boo,
    4: 'bar',
    7: 'car'

在 ES6 中。

提前致谢!!

【问题讨论】:

developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 【参考方案1】:

使用Array#forEach

var data = [  name: 'foo', type: 'fizz', val: 9 ,  name: 'boo', type: 'buzz', val: 3 ,  name: 'bar', type: 'fizz', val: 4 ,  name: 'car', type: 'buzz', val: 7 , ], 
    res = ;
    data.forEach(v => res[v.val] = v.name);

    console.log(res);

使用Array#reduce

var data = [  name: 'foo', type: 'fizz', val: 9 ,  name: 'boo', type: 'buzz', val: 3 ,  name: 'bar', type: 'fizz', val: 4 ,  name: 'car', type: 'buzz', val: 7 , ],
    res = data.reduce(function(s,a)
      s[a.val] = a.name;
      return s;
    , );
  
    console.log(res);

【讨论】:

对不起,期待投票者的一些细节。如果我的回答有问题,请告诉我,我会改进它。 是的,有人对我们的有效答案投了反对票 xD 哦,好吧... @Colton 好吧,正式来说,人们会出于任何原因大声反对投票,包括当人们回答零努力问题时。 @Kinduser 感谢您的回复!!投反对票的不是我!! :(【参考方案2】:

这样的事情应该可以工作:

const data = [
   name: 'foo', type: 'fizz', val: 9 ,
   name: 'boo', type: 'buzz', val: 3 ,
   name: 'bar', type: 'fizz', val: 4 ,
   name: 'car', type: 'buzz', val: 7 ,
];

const reduced = data.reduce((acc, item) => 
  acc[item.val] = item.name;
  return acc;
, );

console.log(reduced);

【讨论】:

您可以在答案中插入一个有效的 sn-p 来代替 codepen(编辑时请参阅工具栏上最右边的按钮)。 天哪,我想知道人们是怎么做到的,谢谢!【参考方案3】:

您可以使用Object.assign 并使用生成的computed property names 和值映射对象。

var data = [ name: 'foo', type: 'fizz', val: 9 ,  name: 'boo', type: 'buzz', val: 3 ,  name: 'bar', type: 'fizz', val: 4 ,  name: 'car', type: 'buzz', val: 7 ],
    object = Object.assign(, ...data.map(o => ( [o.val]: o.name )));

console.log(object);
.as-console-wrapper  max-height: 100% !important; top: 0; 

【讨论】:

以上是关于将对象数组减少为对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将平面对象数组转换为嵌套对象数组[重复]

JS:将数组减少为嵌套对象

使用map方法将javascript对象数组转换为其他对象数组[重复]

将对象数组转换为数组[重复]

我想用 JavaScript 将对象数组转换为对象 [重复]

在JS中将对象数组减少为hashmap