首页 > 解决方案 > 如何将数据转换成这样的结构

问题描述

如何将数组转换oArr为结果,如下例所示

例子:

输入:

let oArr = [
   {
      '1': Object,
      'range': [0, 778]
   }, {
      '2': Object,
      'range': [0, 778]
   }, {
      '1': Object,
      'range': [779, 1500]
   }, {
      '3': Objcet,
      'range': [779, 1500]
   }
]

输出:

result = [
    {
      'range': [0, 778],
      '1': Object,
      '2': Object
    },  {
      'range': [779, 1500],
      '1': Object,
      '3': Object
    }
]

标签: javascriptarraysobjectdata-structuresdata-conversion

解决方案


reducer对数组的每个元素使用函数将它们按范围值分组,并通过迭代除范围以外的所有属性来设置结果上的另一个键。

oArr = [
   {
      '1': 'Object',
      'range': [0, 778]
   }, {
      '2': 'Object',
      'range': [0, 778]
   }, {
      '1': 'Object',
      'range': [779, 1500]
   }, {
      '3': 'Object',
      'range': [779, 1500]
   }
];


var result = Object.values(oArr.reduce((c, obj) => {
  c[obj.range] = c[obj.range] || {'range': obj.range};
  
  for (const [key, value] of Object.entries(obj)) { 
    if(key === 'range') continue;
    c[obj.range][key] = value;
  }
  return c;
}, {}));

console.log(result);


推荐阅读