我需要循环遍历整个 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));


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!