2016-04-13 4 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(); 
    } 
    } 

EDIT: Улучшение, как предложил Мэтью Herbst

+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"); 
    } 
Смежные вопросы