如何将数组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
    }
]

最佳答案

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



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);

关于javascript - 如何将数据转换成这样的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58621033/

10-12 03:42