gpt4 book ai didi

JAvascript:在 for 循环中删除行时如何控制数组长度

转载 作者:行者123 更新时间:2023-11-28 11:30:23 24 4
gpt4 key购买 nike

我正在尝试删除 [i][1] 等于 0 的行。使用下面的代码,我有一个错误“未捕获的类型错误:无法读取未定义的属性'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));

最佳答案

对此有几个可能的答案。

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);

关于JAvascript:在 for 循环中删除行时如何控制数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51549822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com