<script>
let arr = [{ a: "我是a1", b: [{ a: "二层c1", b: [{ id: 1 }] }] }]
let obj = {}
arr.forEach((v) => {
obj[v.a] = v.b
})
Object.keys(obj).forEach((v) => {
let newObj = {}
obj[v].forEach((j) => {
newObj[j.a] = j.b
obj[v] = newObj
})
})
// console.log(obj) // {"我是a1":{"二层c1":"二层d1"},"我是a2":{"二层c2":"二层d2"}}
let arr2 = [
{ a: "我是a1", b: [{ a: "二层c1", b: [{ id: 3 }] }] },
{ a: "我是a1", b: [{ a: "二层c2", b: [{ id: 6 }] }] },
{ a: "我是a2", b: [{ a: "二层c2", b: [{ id: 4 }] }] },
{ a: "我是a2", b: [{ a: "二层c3", b: [{ id: 2 }] }] },
{ a: "我是a3", b: [{ a: "二层c2", b: [{ id: 4 }] }] },
]
// 把arr2转成obj2
let obj2 = {}
arr2.forEach((v) => {
obj2[v.a] = v.b
})
Object.keys(obj2).forEach((v) => {
let newObj = {}
obj2[v].forEach((j) => {
newObj[j.a] = j.b
obj2[v] = newObj
})
})
// console.log(obj2)
// 将obj2合并到obj
// 1.判断:obj的key是否有obj2的key,没有添加,有继续判断
arr2.forEach((v) => {
if (v.a in obj) {
// 记住这个方法,判断对象的key
// -------- 这个最后看 start -----------
// 2. 里面还有一层,继续判断
v.b.forEach((j) => {
if (j.a in obj[v.a]) {
obj[v.a][j.a] = [...obj[v.a][j.a], ...j.b] // 第二次有这个key,则往这个的b数组里面push
} else {
obj[v.a][j.a] = j.b // 第二次的没有这个key则添加这个key
}
})
// -------- 这个最后看 end -----------
} else {
obj[v.a] = v.b // obj中没有这个key,则添加这个kye
}
})
console.log(obj)
/* 最后的结果
{
我是a1: {
二层c1: [{ id: 1 }, { id: 3 }],
二层c2: [{ id: 6 }],
},
我是a2: [{ a: "二层c2", b: [{ id: 4 }] }],
我是a3: [{ a: "二层c2", b: [{ id: 4 }] }],
}
*/
</script>
js两个数组合并,a属性相同往b属性push,a属性不用往这个数组添加
最新推荐文章于 2024-01-13 10:56:49 发布