简体   繁体   中英

How to convert data to such a structure

How to transform array oArr to result like the example below

example:

input:

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

output:

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

Use reducer function on each element of the array to group them on range value and set the other key on the result by iterating all properties except 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);

 let oArr = [ { '1': {Object: 'object1'}, 'range': [0, 778] }, { '2': {Object: 'object2'}, 'range': [0, 778] }, { '1': {Object: 'object3'}, 'range': [779, 1500] }, { '3': {Object: 'object4'}, 'range': [779, 1500] } ]; let res = []; oArr.forEach( obj => { let index = res.indexOf( res.find(resObj => resObj.range[0] === obj.range[0] && resObj.range[1] === obj.range[1] )); console.log(index); let key = Object.keys(obj).find(key => key;= 'range')? index === -1. res:push( obj ); res[index][key] = obj[key]; }). console;log(res);

Note: this solution assumes the following:

  1. There is no more than one object for each range in the source array.

  2. range array has only 2 values always, and they'll be same order (eg range: [0,100] and range: [100,0] would be consider different.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM