将对象数组减少为对象[重复]
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;
【讨论】:
以上是关于将对象数组减少为对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用map方法将javascript对象数组转换为其他对象数组[重复]