2016-08-02 49 views
1

正試圖從具有多個父親子代的嵌套JSON中篩選出一些特定數據。這裏是我的JSON,從嵌套Json中獲取具有多個父親子代的特定數據

[{ 
 
    "id": "111111", 
 
    "name": "Parent", 
 
    "steps": [{ 
 
    "id": "22222", 
 
    "name": "Child", 
 
    "steps": [{ 
 
     "id": "333333", 
 
     "name": "Child -Child", 
 
     "steps": [{ 
 
     "id": "444444", 
 
     "name": "Child - Child - Child", 
 
     "steps": [{ 
 
      "id": "5555", 
 
      "name": "Child - Child - Child - Child" 
 
     }, { 
 
      "id": "522e9327-0747-4080-b6e2-d57e726b5b26", 
 
      "name": "Child - Child - Child - Child 2" 
 
     }], 
 

 
     }], 
 

 
    }], 
 

 
    }], 
 
}]

什麼想在這裏做的是我必須得到一些具體數據的這此嵌套的JSON內。例如:我需要輸出像["parent","Child","Child-Child"...etc ]。所以我使用Java腳本的地圖功能,但輸出是不同的像這樣一個["ParentChildChildChild"](沒有空格)。如果輸出是字符串只意味着我可以把「\ n」和分開他們,但有時他們在數字,所以問題將發生。這是我的代碼,我試過了,

var myReturnedValues = mainSteps.map(x => [ 
 
    x.steps.map(y => y.name + 
 
    y.steps.map(z => z.name + 
 
     z.steps.map(a => a.name + a.steps.map(b => b.name)) 
 
    ) 
 
) 
 
]);

有人可以幫/澄清我。

+0

您可以使用下劃線在遞歸 –

回答

2

爲了達到這個最有效的你需要達到這個最有效的你需要爲了達到這個最有效的你需要使用遞歸使用遞歸使用遞歸。

使用此模式意味着無論嵌套對象有多少級別,該數組總是會被填充。試試這個:

var data = [{ 
 
    "id": "111111", 
 
    "name": "Parent", 
 
    "steps": [{ 
 
    "id": "22222", 
 
    "name": "Child", 
 
    "steps": [{ 
 
     "id": "333333", 
 
     "name": "Child -Child", 
 
     "steps": [{ 
 
     "id": "444444", 
 
     "name": "Child - Child - Child", 
 
     "steps": [{ 
 
      "id": "5555", 
 
      "name": "Child - Child - Child - Child" 
 
     }, { 
 
      "id": "522e9327-0747-4080-b6e2-d57e726b5b26", 
 
      "name": "Child - Child - Child - Child 2" 
 
     }], 
 

 
     }], 
 

 
    }], 
 

 
    }], 
 
}] 
 

 
var names = []; 
 
function getNames(arr) { 
 
    for (var i = 0; i < arr.length; i++) { 
 
     names.push(arr[i].name); 
 
     if (arr[i].steps && arr[i].steps.length) 
 
      getNames(arr[i].steps); 
 
    } 
 
} 
 

 
getNames(data); 
 

 
console.log(names);

+0

好的一個人:)) – madalinivascu

+0

@Rory McCrossan扁平化功能,感謝我mam..It的作品,但一個新的問題arised!可以編輯我的問題,並用解釋更新我的問題? –

+0

當然,雖然如果它是一個單獨的問題,它可能是值得開始一個新的問題完全 –

1

您可以使用JavaScript地圖功能&遞歸

var jsonArray = [{ 
    "id": "111111", 
    "name": "Parent", 
    "steps": [{ 
    "id": "22222", 
    "name": "Child", 
    "steps": [{ 
     "id": "333333", 
     "name": "Child -Child", 
     "steps": [{ 
     "id": "444444", 
     "name": "Child - Child - Child", 
     "steps": [{ 
      "id": "5555", 
      "name": "Child - Child - Child - Child" 
     }, { 
      "id": "522e9327-0747-4080-b6e2-d57e726b5b26", 
      "name": "Child - Child - Child - Child 2" 
     }], 

     }], 

    }], 

    }], 
}] 

var namesArray = []; 
var recur = function(obj) { 
    namesArray.push(obj.name); 
    if(obj.steps) { 
    obj.steps.map(recur); 
    } 
} 

jsonArray.map(recur); 
console.log(namesArray); 
+0

感謝buddy。這一個也適用於我。 –

1

實現這一點,你也可以嘗試

function getObjectKeyValues(obj, objKey) { 
    var result = []; 
    JSON.stringify(obj, function(key, value) { 
     if (key === objKey) { 
      result.push(value) 
     } 
     return; 
    }); 
    return result; 
} 

檢查:

MDN JSON.stringify()