在javascript中查找对象的二维数组中的值索引

时间:2012-05-08 19:37:00

标签: javascript arrays multidimensional-array for-loop

我有一个像这样的2D对象数组:

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

我需要在顶层数组找到id的索引。

因此,如果我要搜索和标识值为'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 
                }
            }
        }           
    }
}

2 个答案:

答案 0 :(得分:4)

将代码包装在一个函数中,用return i替换你的注释,通过返回一个sentinel值(例如-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 :(得分: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