2012-05-08 3 views
2

У меня есть 2D массив объектов, как так:Поиск индекса стоимости в двухмерном массиве объектов в JavaScript

[[{id: 123}, {id: 456}, {id: 789}], [{id: 111}, {id: 222}, {id: 333}], [{id: 444}, {id: 555}, {id: 666}], [{id: 777}]] 

Мне нужно найти индекс ид на верхнем уровне массива.

Так что, если я должен был искать и ид имущества со значением «222» я бы ожидать, чтобы вернуть индекс 1.

Я попытался следующие:

var arr = [[{id: 123}, {id: 456}, {id: 789}], [{id: 111}, {id: 222}, {id: 333}], [{id: 444}, {id: 555}, {id: 666}], [{id: 777}]], 
    len = arr.length 
    ID = 789; 

for (var i = 0; i < len; i++){ 
    for (var j = 0; j < arr[i].length; j++){ 
     for (var key in o) { 
      if (key === 'id') { 
       if (o[key] == ID) { 
        // get index value 
       } 
      } 
     }   
    } 
} 

ответ

4

Оберните код функция, замените ваш комментарий с return i, проваливается, возвращая значение дозорного (например, -1):

function indexOfRowContainingId(id, matrix) { 
    for (var i=0, len=matrix.length; i<len; i++) { 
    for (var j=0, len2=matrix[i].length; j<len2; j++) { 
     if (matrix[i][j].id === id) { return i; } 
    } 
    } 
    return -1; 
} 
// ... 
indexOfRowContainingId(222, arr); // => 1 
indexOfRowContainingId('bogus', arr); // => -1 
1

Поскольку вы знаете, что хочет id, вы не нужен цикл for-in.

Просто нарушите внешний контур, и i будет вашим значением.

var arr = [[{id: 123}, {id: 456}, {id: 789}], [{id: 111}, {id: 222}, {id: 333}], [{id: 444}, {id: 555}, {id: 666}], [{id: 777}]], 
    len = arr.length 
    ID = 789; 

OUTER: for (var i = 0; i < len; i++){ 
    for (var j = 0; j < arr[i].length; j++){ 
     if (arr[i][j].id === ID) 
      break OUTER;   
    } 
} 

Или сделать его в функцию, и вернуть i.

Смежные вопросы