Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Lodash将对象数组中的项分组_Javascript_Arrays_Object_Ecmascript 6_Lodash - Fatal编程技术网

Javascript Lodash将对象数组中的项分组

Javascript Lodash将对象数组中的项分组,javascript,arrays,object,ecmascript-6,lodash,Javascript,Arrays,Object,Ecmascript 6,Lodash,我有一个带属性的对象数组。我想把他们按乐队分组 我尝试过groupBy,但没有得到预期的结果 var data=[ { "tOffice": 123, "cType": 5000, "band": -4877, "minCh": 12, "maxCh": 20 }, { "tOffice": 123, "cType": 5000, "band": -4877, "minCh": 1, "maxCh

我有一个带属性的对象数组。我想把他们按乐队分组

我尝试过groupBy,但没有得到预期的结果

    var data=[
  {
    "tOffice": 123,
    "cType": 5000,
    "band": -4877,
    "minCh": 12,
    "maxCh": 20
  },
  {
    "tOffice": 123,
    "cType": 5000,
    "band": -4877,
    "minCh": 1,
    "maxCh": 2
  },
  {
    "tOffice": 123,
    "cType": 5000,
    "band": -4877,
    "minCh": 11,
    "maxCh": 12
  },
  {
    "tOffice": 123,
    "cType": 6000,
    "band": -5877,
    "minCh": 11,
    "maxCh": 12
  },
  {
    "tOffice": 456,
    "cType": 5000,
    "band": -4544,
    "minCh": 12,
    "maxCh": 20
  },
  {
    "tOffice": 456,
    "cType": 5000,
    "band": -4544,
    "minCh": 10,
    "maxCh": 11
  },
  {
    "tOffice": 456,
    "cType": 6000,
    "band": -5211,
    "minCh": 12,
    "maxCh": 20
  },
  {
    "tOffice": 456,
    "cType": 6000,
    "band": -5211,
    "minCh": 12,
    "maxCh": 20
  },
  {
    "tOffice": 456,
    "cType": 6000,
    "band": -5211,
    "minCh": 12,
    "maxCh": 20
  }
];
预期产出:

var expectedResult = [{
   tOffice: 123,
   bandType: [{
         band: '123-5000',
         minMaxCharge: [{
            minCh: 12,
            maxCh: 20
         }, {
            minCh: 1,
            maxCh: 2
         }, {
            minCh: 11,
            maxCh: 12
         }]
      },
      {
         band: '123-6000',
         minMaxCharge: [{
            minCh: 11,
            maxCh: 12
         }]

      }
   ]
}, {
   tOffice: 456,
   bandType: [{
         band: '456-5000',
         minMaxCharge: [{
            minCh: 12,
            maxCh: 20
         }, {
            minCh: 10,
            maxCh: 11
         }]
      },
      {
         band: '456-6000',
         minMaxCharge: [{
            minCh: 12,
            maxCh: 20
         }, {
            minCh: 12,
            maxCh: 20
         }]
      }
   ]
}]
预期结果应包含最多2个组合(5000和6000)的tOffice,band是tOffice+cType的组合

_.chain(data).groupBy("band").map(function(v, i) {
  return {

  }
})

我尝试了一些ES6方法,发现lodash方法将是一个不错的选择,但我不知道这是一个vanila js解决方案。您可以使用和执行类似的操作

var data=[{“tOffice”:123,“cType”:5000,“band”:-4877,“minCh”:12,“maxCh”:20},{“tOffice”:123,“cType”:5000,“band”:-4877,“minCh”:1,“maxCh”:2},{“tOffice”:123,“cType”:5000,“band”:-4877,“minCh”:11,“maxCh”:12},{“tOffice”:123,“cType”:6000,“band”:-5877,“minCh”:11,“maxCh”:12},{“tOffice”:456,“cType”:5000,“乐队”:-4544,“minCh”:10,“maxCh”:11},{“tOffice”:456,“cType”:6000,“band”:-5211,“minCh”:12,“maxCh”:20},{“tOffice”:456,“cType”:6000,“band”:-5211,“minCh”:12,“maxCh”:20},{“tOffice”:456,“cType”:6000,“乐队”:-5211,“minCh”:12,“maxCh”:20};
const merged=data.reduce((r,{tOffice,cType,minCh,maxCh})=>{
const office=r[tOffice]=r[tOffice]|{tOffice,bandType:{};
常量带=`${tOffice}-${cType}`
const nested=office.bandType[band]
=office.bandType[band]|{band,minMaxCharge:[]};
nested.minMaxCharge.push({minCh,maxCh})
返回r
},{})
const final=对象值(合并);
final.forEach(a=>a.bandType=Object.values(a.bandType))

console.log(final)
我如何访问r.tOffice而不是r[tOffice]?我是
reduce
回调中的每个项。
tOffice
是可变的。你需要像那样访问它。如何以typescript的方式访问它。我在typescript中遇到很多属性问题