我需要循环遍历整个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很新,所以可能是一个人们可能指出的简单愚蠢的错误。
更新:在尝试简化命名时,我实际上使用冲突的术语使其变得更加困难,所以要经历并更新所使用的变量名称。
答案 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));