Javascript:重构对象数组而不覆盖键

Posted

技术标签:

【中文标题】Javascript:重构对象数组而不覆盖键【英文标题】:Javascript: Refactor array of objects without overwriting keys 【发布时间】:2019-06-17 16:11:01 【问题描述】:

我有一个要重构的对象数组(制作不同的结构)..

现有数组:

[ 0:  category: 100 ,
  1:  category: 101 ,
  2:  category: 102 ,
  3:  tag: 200 ,
  4:  tag: 201 ,
  5:  tag: 202 ,
  6:  year: 300 ,
  7:  year: 301 ,
  8:  year: 302  
]

想要数组:

[ 0:  category: [ 100, 101, 102 ] ,
  1:  tag: [ 200, 201, 202 ] ,
  2:  year: [ 300, 301, 302 ]  
]

非常感谢任何帮助。欢迎使用 ES6 语法。

【问题讨论】:

【参考方案1】:

使用 Array.prototype.reduce

let input = [ category: 100 ,
 category: 101 ,
 category: 102 ,
 tag: 200 ,
 tag: 201 ,
 tag: 202 ,
 year: 300 ,
 year: 301 ,
 year: 302  
];

let output = input.reduce((acc, curr) => 
  let key = Object.keys(curr)[0];
  acc[key] = acc[key] ? [curr[key], ...acc[key]] : [curr[key]];
  return acc;
, );
console.log(output)

【讨论】:

是的!非常感谢你,Ariz。你向我介绍了 .reduce 的一个很棒的功能,而且答案非常优雅。

以上是关于Javascript:重构对象数组而不覆盖键的主要内容,如果未能解决你的问题,请参考以下文章

如何根据javascript中的键合并和替换两个数组中的对象?

将对象添加到数组而不覆盖

原生JavaScript对象数组去重,重构为对象{pro1:[hash], pro02: [hash]}

用 Javascript 中的键值对重构对象数组并输出或发出它以用 mongoose 和 MongoDB 保存它?

Object.assign() ,合并/覆盖键,复制数组的值以创建对象

合并 JS 对象而不覆盖