我希望所有的樹都合併到其父的各個節點,但如果它的子節點包含兩個或兩個以上的子節點,沒有任何變化如何使用遞歸篩選所有單個JSON數據?
這裏是我的數據模型,例如:
[{
name: "HOME",
value: [{//Only node merged into the parent level
name: "HOME",
value: [{//Only node merged into the parent level
name: "HOME",
id: '1000'
}]
}]
}, {
name: "ARTICLE",
value: [{
name: "ARTICLE",
value: [{
name: "ARTICLE TYPE 1",
id: '2001'
},{
name: "ARTICLE TYPE 2",
id: '2002'
}]
},{
name: "ARTICLE",
value: [{//Only node merged into the parent level
name: "ARTICLE TYPE 3",
id: '2003'
}]
}]
}]
我要過濾的數據得到這樣的:
[{
name: "HOME",
id: 1000
}, {
name: "ARTICLE",
value: [{
name: "ARTICLE",
value: [{
name: "ARTICLE TYPE 1",
id: '2001'
},{
name: "ARTICLE TYPE 2",
id: '2002'
}]
},{
name: "ARTICLE TYPE 3",
id: '2003'
}]
}]
//更新1: 這是想法,但是現在有一個問題,找到節點不能回下降到原來的節點,您只能修改cu rrent父節點:
function filter(data){
for(var i = 0; i < data.length; i++){
if(!data[i].value) continue;
//Check whether there are child nodes "value" is because it contains a "value" does not exist "id",
//you must enter a recursive make the following checks
if(data[i].value.length === 1 && !data[i].value[0].value) {
data[i].id = data[i].value[0].id;
delete data[i].value;
continue;
}
filter(data[i].value);
}
return data;
}
我現在直接修改原始對象,我不知道這樣做是否合理。
//更新2: 我的最終措辭是這樣的,結果輸出看起來是正確的,但不確定邏輯是否正確,並且看起來非常難看,或者不知道是否有更好的解決方案?
function filter(data, parent){
for(var i = 0; i < data.length; i++){
if(data[i].value) filter(data[i].value, data[i]);
if(parent && data.length === 1 && !data[i].value) {
parent.id = data[i].id;
delete parent.value;
}
}
return data;
}
向我們展示你嘗試過什麼。 – Cristik
我得知你爲什麼要檢查一個節點是否只有一個孩子,但你爲什麼要檢查這個孩子是否也有孩子?這應該只發生在葉子上嗎?如果你擺脫了「!data [i] .value [0] .value」檢查,我相信你應該最終得到你想要的結構。 – Vinay