js实现数组根据相同字段,合并出新的数据?
把相同batch合并,并生成对应的positionList 数组
原始数组:
const list = [ {
positionId: '1001',
positionName: 'B-b-b-101',
batch: '1',
num: 5,
},
{
positionId: '1002',
positionName: 'B-b-b-102',
batch: '2',
num: 3,
},
{
positionId: '1004',
positionName: 'B-b-b-104',
batch: '1',
num: 1,
},
{
positionId: '1004',
positionName: 'B-b-b-105',
batch: '2',
num: 3,
},
]
期望数组:
const list = [ {
positionId: '1001',
positionName: 'B-b-b-101',
batch: '1',
num: 5,
positionList: [
{
positionId: '1001',
positionName: 'B-b-b-101',
num: 5,
},
{
positionId: '1004',
positionName: 'B-b-b-104',
num: 1,
},
],
},
{
positionId: '1002',
positionName: 'B-b-b-102',
batch: '2',
num: 3,
positionList: [
{
positionId: '1002',
positionName: 'B-b-b-102',
num: 2,
},
],
},
{
positionId: '1005',
positionName: 'B-b-b-105',
batch: '2',
num: 3,
positionList: [
{
positionId: '1005',
positionName: 'B-b-b-105',
num: 3,
},
],
},
]
回答:
const list = [ {
positionId: '1001',
positionName: 'B-b-b-101',
batch: '1',
num: 5,
},
{
positionId: '1002',
positionName: 'B-b-b-102',
batch: '2',
num: 3,
},
{
positionId: '1004',
positionName: 'B-b-b-104',
batch: '1',
num: 1,
},
{
positionId: '1004',
positionName: 'B-b-b-105',
batch: '2',
num: 3,
},
]
let obj ={}
let newList = list.reduce((item, next) => {
obj[next.batch] ? '' : obj[next.batch] = true && item.push(next)
return item
}, []).map(m=>{
m.positionList = JSON.parse(JSON.stringify(list.filter(f => f.batch == m.batch)))
return m
})
console.log(newList)//格式化好的数据
回答:
js
代码
Object.values(list.reduce((obj, {batch, ...rest}) => { obj[batch] ??= {batch, ...rest, positionList: []};
obj[batch].positionList.push({...rest});
return obj;
}, {}))
结果
[ {
"batch": "1",
"positionId": "1001",
"positionName": "B-b-b-101",
"num": 5,
"positionList": [
{"positionId": "1001", "positionName": "B-b-b-101", "num": 5},
{"positionId": "1004", "positionName": "B-b-b-104", "num": 1}
]
},
{
"batch": "2",
"positionId": "1002",
"positionName": "B-b-b-102",
"num": 3,
"positionList": [
{"positionId": "1002", "positionName": "B-b-b-102", "num": 3},
{"positionId": "1004", "positionName": "B-b-b-105", "num": 3}
]
}
]
以上是 js实现数组根据相同字段,合并出新的数据? 的全部内容, 来源链接: utcz.com/p/933028.html