我在每個物件中都有無限級別陣列,我想根據級別添加“id”。假設如果級別 1 則 id 應為 1,而級別 2 則 id 將為 2,依此類推。
{
"name": "Anything2",
"code": "SS_1",
"levels": [
{
"levelName": "New level",
"levels": [
{
"levelName": "New Level2",
"levels": [
{
"levelName": "New Level2",
{
"levelName": "New Level2",
"levels": [
{
"levelName": "New level"
}
]
}
},
{
"levelName": "New Level2",
},
{
"levelName": "New Level2",
}
]
},
{
"levelName": "New Level2"
},
{
"levelName": "New Level2",
"levels": [
{
"levelName": "New level"
}
]
}
]
}
]
}
我想將上面的陣列轉換為下面的新陣列。我嘗試使用 for 回圈,但它不起作用我沒有得到預期的資料。我想根據級別添加“id”。假設如果級別 1 則 id 應為 1,而級別 2 則 id 將為 2,依此類推。
{
"name": "Anything2",
"code": "SS_1",
"levels": [
{
"level": 1,
"levelName": "New level",
"levels": [
{
"level": 2,
"levelName": "New Level2",
"levels": [
{
"level": 3,
"levelName": "New Level2",
{
"levelName": "New Level2",
"levels": [
{
"level": 4,
"levelName": "New level"
}
]
}
},
{
"level": 3,
"levelName": "New Level2",
},
{
"level": 3,
"levelName": "New Level2",
}
]
},
{
"level": 2,
"levelName": "New Level2"
},
{
"level": 2,
"levelName": "New Level2",
"levels": [
{
"level": 3,
"levelName": "New level"
}
]
}
]
}
]
}
uj5u.com熱心網友回復:
您可以采用遞回方法并為每個級別移交一個遞增的級別。
addLevels接受一個級別變數并回傳一個與物件分離levels的另一個函式。物件的其余部分是一個新變數。
內部函式回傳一個帶有level屬性的新物件,沒有舊物件levels和一個levels獲取嵌套陣列映射的屬性。
addLevel具有一個閉包,level可以保留嵌套函式的值。
const
addLevel = (level = 0) => ({ levels = [], ...o }) =>
({ level, ...o, levels: levels.map(addLevel(level 1)) }),
data = { name: "Anything2", code: "SS_1", levels: [{ levelName: "New level", levels: [{ levelName: "New Level2", levels: [{ levelName: "New Level2" }, { levelName: "New Level2", levels: [{ levelName: "New level" }] }, { levelName: "New Level2" }, { levelName: "New Level2" }] }, { levelName: "New Level2" }, { levelName: "New Level2", levels: [{ levelName: "New level" }] }] }] },
result = addLevel()(data);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
在這里,我將屬性稱為“深度”:
const data = {
"name": "Anything2",
"code": "SS_1",
"levels": [{
"levelName": "New level",
"levels": [{
"levelName": "New Level2",
"levels": [{
"levelName": "New Level2"
},
{
"levelName": "New Level2",
"levels": [{
"levelName": "New level"
}]
},
{
"levelName": "New Level2"
},
{
"levelName": "New Level2"
}
]
},
{
"levelName": "New Level2"
},
{
"levelName": "New Level2",
"levels": [{
"levelName": "New level"
}]
}
]
}]
};
function addleveldepth(arr, depth = 1) {
arr.forEach(obj => {
obj.depth = depth;
if (obj.levels) {
addleveldepth(obj.levels, depth 1);
}
});
}
addleveldepth(data.levels);
console.log(data);
uj5u.com熱心網友回復:
認為它有效:
const data = {"name": "Anything2","code": "SS_1","levels": [{"levelName": "New level","levels": [{"levelName": "New Level2","levels": [{"levelName": "New Level2","levels": [{"levelName": "New level"}]},{"levelName": "New Level2",},{"levelName": "New Level2",}]},{"levelName": "New Level2"},{"levelName": "New Level2","levels": [{"levelName": "New level"}]}]}]};
const iter = (arr, level) => arr.map((obj) => Array.isArray(obj.levels)
? { level, ...obj, levels: iter(obj.levels, level 1) }
: { level, ...obj });
const result = {...data, levels: iter(data.levels, 1) };
console.dir(result, {depth: null})
.as-console-wrapper{min-height: 100%!important; top: 0}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/410827.html
標籤:
