我有一個看起來像這樣的父子陣列:
const myTestArray = [
{
"id": "1",
"parent": "root"
},
{
"id": "2",
"parent": "1"
},
{
"id": "3",
"parent": "1"
},
{
"id": "4",
"parent": "2"
},
{
"id": "5",
"parent": "4"
}
];
從這里我已經能夠創建一個嵌套的父子json樹,但現在我需要另一個看起來像這樣的資料結構:
const childesArray = {
"1": ["1", "2", "3", "4", "5"],
"2": ["2", "4", "5"],
"3": ["3"],
"4": ["4", "5"],
"5": ["5"]
};
對于 myTestArray 中的每個元素,我需要一個包含該元素的所有子項(深)的陣列。
我想我在這里也可以在這個陣列上使用 reduce,但我現在被困住了如何實作這一點。誰能指出我正確的方向?或者對此有什么解決方案?
兄弟。符文
uj5u.com熱心網友回復:
有幾種方法可以實作這一點,但我盡量保持簡單。看看這個例子。
const nesting = {};
myTestArray.forEach((item) => {
const { parent, id } = item;
if (!nesting[id]) {
nesting[id] = [id];
}
if (!nesting[parent] && parent !== "root") {
nesting[parent] = [parent];
}
if (parent !== "root") {
nesting[parent].push(id);
}
});
console.log(nesting);
//
// {
// "1":["1","2","3"],
// "2":["2","4"],
// "3":["3"],
// "4":["4","5"],
// "5":["5"]
// }
//
uj5u.com熱心網友回復:
您可以獲取 JSON 物件并使用 ForEach 回圈對其進行迭代。然后,您可以將一個元素附加到其父元素的索引,最終將得到一個二維陣列,例如您指定的陣列。
var newArr = {};
myTestArray.forEach(e => {
newArr[e.id] = [e.id];
if(e.parent != "root"){
newArr[e.parent].push(e.id);
}
});
會產生
newArr = { '1': [ '1', '2', '3' ],
'2': [ '2', '4' ],
'3': [ '3' ],
'4': [ '4', '5' ],
'5': [ '5' ] }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/411563.html
標籤:
