2016-04-13 62 views
0

所以我有這樣的對象:遍歷對象的對象與數組作爲值

{ 
    "apples": [ 
    "one", 
    "two" 
    ], 
    "oranges": [ 
    "three", 
    "four" 
    ] 
} 

我看上去怎麼樣通過這個對象,並查找four例如?例如:

for (var i=0; i < obj.length; i++) { 
    for (var y=0; y <obj.childObj.length; y++ { 
    obj.childObj[i] === 'four' ? return : null; 
    } 
} 

或者是否有更好的方法來構造這些數據?

+2

你的代碼是錯誤的。 'return'不能像那樣使用。你的要求是什麼? –

+0

你想要返回什麼? – gurvinder372

+0

這取決於目的。如果你總是搜索四個,那麼具有四個關鍵字的對象將是有意義的。 –

回答

2
for(var x in obj) 
if(obj.hasOwnProperty(x)) { 
    for(var y in obj[x]) 
    if(obj[x].hasOwnProperty(y)) { 
    obj[x][y] === 'four' ? doSomething() : doSomethingElse(); 
    } 
    } 

編輯:由馬修·赫布斯特建議

+0

最初看起來不錯。這是存儲和檢索多維信息的最有效方式嗎? –

+2

請確保也使用'obj.hasOwnProperty(x)'和'obj [x] .hasOwnProperty(y)' –

+0

我不知道有任何其他方法可以使您在此之上獲得顯着的性能提升。 –

0

您可以使用for (x in y) statemment改進:

var data = { 
    "apples": [ 
    "one", 
    "two" 
    ], 
    "oranges": [ 
    "three", 
    "four" 
    ] 
}; 

for (var key in data) { 
    var obj = data[key]; 
    for (var i=0; i <obj.length; i++) { 
     // obj[i] === 'four' ? return : null; 
     console.log(obj[i]); 
    } 
} 

這將打印:

one 
two 
three 
four 
0

如果想讓找出這個對象有四個地方然後

var isFourAvailable = Object.keys(obj).filter(function(val){ return obj[val].indexOf("four") != -1 }).length > 0; 

使其更加通用

function findX(x) 
{ 
    return Object.keys(obj).filter(function(val){ return obj[val].indexOf(x) != -1 }).length > 0; 
} 
0

試試這個;)

修改你的代碼;

for (var i = 0; i < obj.length; i++) { 
    for (var y = 0; y < obj[i].length; y++ { 
    if(obj[i][y] === 'four'){ 
     console.log("It's four"); 
    } 
    } 
} 
0

可以使用的indexOf

var x={ 
     "apples": [ 
     "one", 
     "two" 
     ], 
     "oranges": [ 
     "three", 
     "four" 
     ] 
    } 
    for (var e in x) { 
     if (x[e].indexOf("four") > -1) 
     console.log("found Four"); 
    }