遇到一个结构比较复杂的对象,夜不能寐,求大神协助
基本结构大概是这样:
[{
aId: 1,
aList: [{
bId: 22,
bList: [{
cId: 333,
cList: [{
dId: 4444,
num: 2
}]
}]
}]
}]
其中每层List中可以包含多个下级对象,比如:
[{
aId: 1,
aList: [{
bId: 22,
bList: [{
cId: 333,
cList: [{
dId: 4444,
num: 2
}, {
dId: 5555,
num: 1
}]
}]
}, {
bId: 33,
bList: [{
cId: 321,
cList: [{
dId: 4123,
num: 1
}]
},
{
cId: 987,
cList: [{
dId: 4193,
num: 1
}]
}
]
}]
}]
需求是,将两个这样的结构合并,分别判断每层的id是否相同,不同就push到相应的list中,相同就继续往下遍历,(如果最后dId也相同,则num++)比如:
var a = [{
aId: 1,
aList: [{
bId: 22,
bList: [{
cId: 333,
cList: [{
dId: 4444,
num: 2
},
{
dId: 5555,
num: 1
}]
}]
}]
}]
var b = [{
aId: 1,
aList: [{
bId: 22,
bList: [{
cId: 333,
cList: [{
dId: 6666,
num: 1
}]
}]
},
{
bId: 33,
bList: [{
cId: 987,
cList: [{
dId: 5678,
num: 1
}]
}]
}
]
}]
console.log(reduce(a,b));
输出:
[{
aId: 1,
aList: [{
bId: 22,
bList: [{
cId: 333,
cList: [{
dId: 4444,
num: 2
},
{
dId: 5555,
num: 1
},
{
dId: 6666,
num: 1
}
]
}]
}, {
bId: 33,
bList: [{
cId: 987,
cList: [{
dId: 5678,
num: 1
}]
}]
}]
}]
es6、5不限。
把题主的例子稍微复杂了下,考虑了全部相同导致 num++ 的情况,另,优化了代码