我有一個嵌套的對象,與此類似:有n個級別轉換嵌套對象到數組
var obj = {
"prop1": {
"prop1A": "A",
"prop1B": {
"prop1BA": "BA"
},
"prop1C": "C"
}
};
我的最終目標是要過濾此目的是特定預先定義的鍵,根據另一模式對象,例如:
var filterSchema = {
"prop1":["prop1A", {"prop1B":["prop1BA"]}]
};
(過濾器鍵是預定義的,如果你有更好的想法,我可以以不同結構此對象...
輸出應該是一個數組中。我們的案例:
["A","BA"]
我設法使用遞歸遍歷對象。我想知道是否有實現這一目標更優雅的方式(嘗試使用jQuery的地圖,沒有運氣/擴展)
編輯 我知道,這是一個「N」級問題應該由遞歸來解決。這裏的區別在於我有預定義的過濾器,它已經具有「N」級別。所以我雖然也許我可以使用過濾器數組過濾Objet並將其轉換爲數組。
EDIT2 謝謝大家的不同答案。這是我自己的問題(我一直在尋找一個更優雅的一個在一開始)解決方案: My solution
var obj = {
"prop1": {
"prop1A": "A",
//"prop1B": {
// "prop1BA": "BA"
//},
"prop1C": "C",
"prop1D": "D",
"prop1E": {"prop1E1": "444"}
},
"prop2": "12345"
};
var schemaObj = {
"prop1": {
"prop1A": "true",
"prop1B": {
"prop1BA": "true"
},
"prop1C": "true"
},
"prop2": "true"
};
var resultsArray = [];
var keys = Object.keys(schemaObj);
for(var i=0;i<keys.length;i++){
if(obj[keys[i]]){
parser(schemaObj[keys[i]], obj[keys[i]]);
}
}
function parser(v,o){
if(typeof v === "string"){
resultsArray.push(o);
}
else{
var keys2 = Object.keys(v);
for(var j=0;j<keys2.length;j++){
if(o[keys2[j]]){
parser(v[keys2[j]], o[keys2[j]]);
}
}
}
}
console.log(resultsArray);
只是一個關於這個問題的提醒 - 我已經有遞歸解決方案。我正在尋找不同的解決方案
拆下來JSON的所有引用。 –
好奇,在這裏如何不雅地遞歸?似乎(不考慮性能問題)成爲一個理想的用例... –
這裏沒有其他辦法,但遞歸 – hindmost