通过IF语句

时间:2017-02-17 05:55:22

标签: javascript multidimensional-array

我需要循环遍历整个2D数组(OldTable)以检查Column1的值是否为1且Col7不为空(null)。如果上述条件为真,则将当前(i)元素数组推入newTable。 我的JS片段如下......

var newTable = [];  
  for (var i=1; i<OldTable.length; i++){     
    if(OldTable[i][0]==1 && OldTable[i][7]!==null){
      newTable.push(OldTable[i]);      
    }    
  }  

看起来像是一件相当直接的事情,但目前正在用这个错误击中砖墙......

  

TypeError:无法从undefined中读取属性“0”。 (第80行,档案   “代码”

我试图将if语句简化为......

if(OldTable[i][0]==1){

......但仍然是同样的错误。 我可以使用...

显示数组元素
Browser.msgBox(OldTable[50][0]);

我对JS很新,所以可能是一个人们可能指出的简单愚蠢的错误。

更新:在尝试简化命名时,我实际上使用冲突的术语使其变得更加困难,所以要经历并更新所使用的变量名称。

1 个答案:

答案 0 :(得分:1)

如果@Massimo的评论中提到您将循环从i=1更改为i=0,则您的代码应该有效,如下所示。另外,为了满足您对JavaScript中更多现代工具的需求,我还使用ES6 / ES2015包含了一个基本相同的问题解决方案。

var myArray = [
  [1, 0, 0, 0, 0, 0, 0, 'foo'    ], // should pass
  [9, 1, 1, 1, 1, 1, 1, 'foo'    ], // should fail
  [1, 2, 2, 2, 2, 2, 2, 'foo'    ], // should pass
  [1, 3, 3, 3, 3, 3, 3, null     ], // should fail
  [0, 4, 4, 4, 4, 4, 4, null     ], // should fail
  [1, 5, 5, 5, 5, 5, 5, undefined], // should pass
  [1, 6, 6, 6, 6, 6, 6, 'foo'    ]  // should pass
];

function f1(array) {
  var newArray = [];
  for (var i = 0; i < array.length; i++) {
    if (array[i][0] == 1 && array[i][7] !== null) {
      newArray.push(array[i]);
    }
  }
  return newArray;
}

const f2 = array => array.filter(e => e[0] === 1 && e[7] !== null);

console.log(f1(myArray));
console.log(f2(myArray));