javascript - 根据先前对象数组中的共享属性创建新对象

标签 javascript arrays object grouping

我有一个包含“年”键和“日期”键的对象数组,如下所示:

    var fullDates = [
{ 'year': '2018', date: '2018-01'},
{ 'year': '2017', date: '2017-02'},
{ 'year': '2016', date: '2016-03'},
{ 'year': '2018', date: '2018-04'},
{ 'year': '2017', date: '2017-05' },
{ 'year': '2016', date: '2016-06'}
];

我想创建一个包含年份和日期的新对象数组,但其中“日期”键是一个数组,如下所示。我该怎么做?

var final = [
{ 'year': '2018', date: ['2018-01', '2018-02']},
{ 'year': '2017', date: ['2017-03', '2017-04']},
{ 'year': '2016', date: ['2016-04', '2016-06']}
]

最佳答案

您可以使用 Array.reduce() 操作来获取该输出:

var fullDates = [
  { 'year': '2018', date: '2018-01'},
  { 'year': '2017', date: '2017-02'},
  { 'year': '2016', date: '2016-03'},
  { 'year': '2018', date: '2018-04'},
  { 'year': '2017', date: '2017-05' },
  { 'year': '2016', date: '2016-06'}
];
var final = fullDates.reduce((acc, obj)=>{
  var existingObj = acc.find(item => item.year === obj.year);
  if(existingObj){
    existingObj.date.push(obj.date);
    return acc;
  }
  obj.date = [obj.date];
  acc.push(obj);
  return acc;
}, []);
console.log(final);

关于javascript - 根据先前对象数组中的共享属性创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51363146/

相关文章:

javascript - 将字符串拆分为多维数组

javascript - 插入数组对象

ios - UIView 挥动 ARM

javascript - 从 Javascript 调用 ActionScript 函数

javascript - jquery .on click 不适用于后来添加的元素

javascript - JavaScript 和 Mocha 的单元测试

ios - 在 swift 中存储一个 for in 循环

javascript - 正则表达式接受特殊字符时出错

javascript - 排序数组但保留原始索引

javascript - 从 json 文件中提取包含数组中值的项目