【问题标题】:Javascript array of objects merge based on the object property [duplicate]Javascript对象数组基于对象属性合并[重复]
【发布时间】:2021-03-29 15:25:28
【问题描述】:

我下面有一个数组。

var array = [
  { category: 'Input', field: 0, value: '17' },
  { category: 'Input', field: 0, value: '5' },
  { category: 'Input', field: 0, value: '8' },
  { category: 'Input', field: 5, value: '1' },
  { category: 'Input', field: 5, value: '4' },
  { category: 'Input', field: 0, value: '1' }
];

我想转换下面的数组--根据字段值合并对象,如果值相同,得到如下结果

[
  { category: 'Input', field: 0, value: ['17', '5', '8', '1'] },
  { category: 'Input', field: 5, value: ['1', '4'] }
];

【问题讨论】:

    标签: javascript arrays angular typescript object


    【解决方案1】:

    var array = [
      { category: 'Input', field: 0, value: '17' },
      { category: 'Input', field: 0, value: '5' },
      { category: 'Input', field: 0, value: '8' },
      { category: 'Input', field: 5, value: '1' },
      { category: 'Input', field: 5, value: '4' },
      { category: 'Input', field: 0, value: '1' }
    ];
    
    const obj = array.reduce((val, cur) => {
      if (val[cur.field]) {
        val[cur.field].push(cur.value);
      } else {
        val[cur.field] = [cur.value];
      }
      return val;
    }, {});
    
    const res = Object.keys(obj).map(key => ({
      category: 'Input',
      field: parseInt(key),
      value: obj[key]
    }));
    
    console.log(res);

    【讨论】:

    • 非常感谢@baymax,如果类别也不同,我该怎么办? var array = [ {类别:'输入',字段:0,值:'17'},{类别:'输入',字段:0,值:'5'},{类别:'输入',字段:0 , value: '8' }, { category: 'Input', field: 5, value: '1' }, { category: 'Input', field: 5, value: '4' }, { category: 'Input' ,字段:0,值:'1'},{类别:'输出',字段:0,值:'1'},];
    猜你喜欢
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2020-02-20
    • 2015-12-05
    • 1970-01-01
    • 2016-10-29
    • 2018-04-18
    • 2020-04-15
    相关资源
    最近更新 更多