Javascript Lodash将对象数组中的项分组
我有一个带属性的对象数组。我想把他们按乐队分组 我尝试过groupBy,但没有得到预期的结果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
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中遇到很多属性问题