我有多個嵌套的物件陣列,其中我需要根據沒有突變的 id 合并 grandChildren 中的物件
細節 ......
###例子
let arr1 = {
"initiateLevel": true,
"parent": [
{
"name": "level1",
"childrens": [
{
"group": "Level-group",
"grandChildrens": [
{
"id": 21,
"technology": "sp1",
"path": "l2"
},
{
"id": 22,
"technology": "sp2",
"path": "l2"
}
]
}
]
},
{
"name": "level2",
"childrens": [
{
"group": "Level-group-2",
"grandChildrens": [
{
"id": 121,
"technology": "sp12",
"path": "l4"
},
{
"id": 122,
"technology": "sp22",
"path": "l4"
}
]
}
]
}
]
}
例如:下面的物件需要與基于 id 的陣列合并
let newobj=
[
{
"id": 22,
"reason": "reason 2",
"phase": "phase 2",
"reviewer": "by user 2",
"date": "date 2"
},
{
"id": 21,
"reason": "reason 1",
"phase": "phase 1",
"reviewer": "by user 1",
"date": "date 1"
}
]
預期輸出:
{
"initiateLevel": true,
"parent": [
{
"name": "level1",
"childrens": [
{
"group": "Level-group",
"grandChildrens": [
{
"id": 21,
"technology": "sp1",
"path": "l2",
"reason": "reason 1",
"phase": "phase 1",
"reviewer": "by user 1",
"date": "date 1"
},
{
"id": 22,
"technology": "sp2",
"path": "l2",
"reason": "reason 2",
"phase": "phase 2",
"reviewer": "by user 2",
"date": "date 2"
}
]
}
]
},
{
"name": "level2",
"childrens": [
{
"group": "Level-group-2",
"grandChildrens": [
{
"id": 121,
"technology": "sp12",
"path": "l4"
},
{
"id": 122,
"technology": "sp22",
"path": "l4"
}
]
}
]
}
]
}
我試著喜歡這個。但它不作業
const merge = (y, z) => {
y.parent.forEach((element) => {
element.childrens.forEach((x) => {
x.grandChildrens.forEach((test) => {
const reviewIndex = z.findIndex(
(reviewItem) => reviewItem.id === test.id
);
if(reviewIndex>=0)
{
return {...test, ...z[reviewIndex]}
}
});
});
});
};
merge(arr1,newobj)
如何根據 id 合并物件而不進行變異。
uj5u.com熱心網友回復:
改用Array.prototype.map,forEach沒有回報
let newobj = [
{
id: 22,
reason: 'reason 2',
phase: 'phase 2',
reviewer: 'by user 2',
date: 'date 2'
},
{
id: 21,
reason: 'reason 1',
phase: 'phase 1',
reviewer: 'by user 1',
date: 'date 1'
}
];
let arr1 = {
initiateLevel: true,
parent: [
{
name: 'level1',
childrens: [
{
group: 'Level-group',
grandChildrens: [
{
id: 21,
technology: 'sp1',
path: 'l2',
reason: 'reason 1',
phase: 'phase 1',
reviewer: 'by user 1',
date: 'date 1'
},
{
id: 22,
technology: 'sp2',
path: 'l2',
reason: 'reason 2',
phase: 'phase 2',
reviewer: 'by user 2',
date: 'date 2'
}
]
}
]
},
{
name: 'level2',
childrens: [
{
group: 'Level-group-2',
grandChildrens: [
{
id: 121,
technology: 'sp12',
path: 'l4'
},
{
id: 122,
technology: 'sp22',
path: 'l4'
}
]
}
]
}
]
};
const merge = (y, z) => {
const parent = y.parent.map((element) => {
return {
...element,
childrens: element.childrens.map((x) => {
return {
...x,
grandChildrens: x.grandChildrens.map((test) => {
return { ...test, ...z.find((reviewItem) => reviewItem.id === test.id) };
})
};
})
}
});
return { ...y, parent };
};
const arr2 = merge(arr1, newobj);
console.log(arr2);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481259.html
標籤:javascript 数组 json 目的
下一篇:PHP,更改多維陣列中的值
