我正在尝试删除[i] [1]等于0的行。 在下面的代码中,我有一个错误“未捕获的TypeError:无法读取未定义的属性'1'”,此外,由于对象的长度在每次更新时都会更改,因此该如何在我的代码中处理呢?谢谢
var arr = [['USA Canada UK', '0'],['Canada UK Australia', '1'],['UK Australia Japan', '1'],['Australia Japan India', '1'],['Japan India USA', '0'],['India USA Canada', '0'],['Canada UK India', '1'],['UK India UK', '1'],['India UK Australia', '1'],['UK Australia China', '1'],['Australia China Brazil', '1'],['China Brazil France', '1'],['Brazil France Brazil', '0'],['France Brazil France', '0'],['Brazil France Australia', '1']];
function removematch(arr){
for(var i = 0, len = arr.length; i < len; i++) {
if(arr[i][1] == 0) {
arr.splice(i, 1)
}
}
return arr;
}
console.log(removematch(arr));
答案 0 :(得分:4)
对此有几种可能的答案。
1)将使您的代码尽可能相似的一种是迭代另一种方式:
for(var i = arr.length - 1; i >= 0; i--) {
这样,删除元素不会影响您将要处理的其余元素的位置,只会影响您已经处理过的元素。
2)另一种方法是在删除时减少长度和索引(因为要处理的下一个元素将占用已删除元素的位置):
arr.splice(i, 1); i--; len--;
3)最有意义的方法甚至不是使用for
循环,而是使用filter
。这一行完成了整个代码段的工作:
let newarr = arr.filter(element => element[1] != 0);
答案 1 :(得分:3)
对于这个特定问题,我建议使用Array.prototype.filter
而不是Array.prototype.splice
。
var arr = [['USA Canada UK', '0'],['Canada UK Australia', '1'],['UK Australia Japan', '1'],['Australia Japan India', '1'],['Japan India USA', '0'],['India USA Canada', '0'],['Canada UK India', '1'],['UK India UK', '1'],['India UK Australia', '1'],['UK Australia China', '1'],['Australia China Brazil', '1'],['China Brazil France', '1'],['Brazil France Brazil', '0'],['France Brazil France', '0'],['Brazil France Australia', '1']];
function removeMatch(array) {
return array.filter(function (row) {
return row[1] !== '0';
});
}
console.log(removeMatch(arr));
答案 2 :(得分:1)
不要使用len
缓存原始的length属性,只需使用arr.length
。
var arr = [['USA Canada UK', '0'],['Canada UK Australia', '1'],['UK Australia Japan', '1'],['Australia Japan India', '1'],['Japan India USA', '0'],['India USA Canada', '0'],['Canada UK India', '1'],['UK India UK', '1'],['India UK Australia', '1'],['UK Australia China', '1'],['Australia China Brazil', '1'],['China Brazil France', '1'],['Brazil France Brazil', '0'],['France Brazil France', '0'],['Brazil France Australia', '1']];
function removematch(arr){
for(var i = 0; i< arr.length; i++) {
if(arr[i][1] == 0) {
arr.splice(i, 1)
i--;
}
}
return arr;
}
console.log(removematch(arr));
我宁愿使用.filter
删除不匹配的内容。拼接是一项繁重的操作,因为它需要在每次删除后重新索引