【问题标题】: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 中。

提前致谢!!

【问题讨论】:

标签: javascript arrays ecmascript-6


【解决方案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; }

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 2021-01-15
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多