我需要循环遍历整个 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: Cannot read property "0" from undefined. (line 80, file "Code"
我尝试将 if 语句简化为...
if(OldTable[i][0]==1){
...但仍然是同样的错误。 我可以使用以下命令很好地显示数组元素...
Browser.msgBox(OldTable[50][0]);
我对 JS 相当陌生,所以可能是一个简单的愚蠢错误,有人可能会指出。
更新:在尝试简化命名时,我实际上使冲突的术语变得更加困难,因此检查并更新了所使用的变量名称。
请您参考如下方法:
如果按照 @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));