关于删除数组中的某一项的问题?

发布于 2022-09-04 13:37:21 字数 488 浏览 6 评论 0

var arr = ["Blockly.Blocks['应用于']","Blockly.JavaScript['应用于']","Blockly.JavaScript['是是是']","Blockly.Blocks['是是是']"];
for(var i=0;i<arr.length;i++){
    if (arr[i].indexOf('应用于') != -1) {
        arr.splice(i,1);
        console.log(i);
        console.log(arr[i]);
    }
}
console.log(arr);

打印出来是这样的:
图片描述

只匹配了一次,这是为什么啊?
谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

缪败 2022-09-11 13:37:22
解决办法1:删除后再i--;   
var arr = ["Blockly.Blocks['应用于']", "Blockly.JavaScript['应用于']", "Blockly.JavaScript['是是是']", "Blockly.Blocks['是是是']"];
for (var i = 0; i < arr.length; i++) {
    if (arr[i].indexOf('应用于') != -1) {
        arr.splice(i--, 1);
    }
}
console.log(arr);

//倒序删除
var arr = ["Blockly.Blocks['应用于']", "Blockly.JavaScript['应用于']", "Blockly.JavaScript['是是是']", "Blockly.Blocks['是是是']"];

for (var i = arr.length - 1; i >= 0; i--) {
    if (arr[i].indexOf('应用于') != -1) {
        arr.splice(i, 1);
    }
}
console.log(arr);
隱形的亼 2022-09-11 13:37:22

你在循环里面修改了原数据arr了啊
第一次循环i=0 arr[0]="Blockly.Blocks['应用于']"可以匹配上
然后你把arr的0元素给删除了
第二次循环i=1 arr[1]="Blockly.JavaScript['是是是']" 了。

这个错误犯的有点。。

迟到的我 2022-09-11 13:37:22

你的for循环,长度是动态改变的,也就是说删除了一个元素,长度就变了

影子是时光的心 2022-09-11 13:37:22

i=0时,arr[0]="Blockly.Blocks['应用于']",arr[0].indexOf('应用于') != -1为true, arr.splice(i,1)删除了第0项,这时arr=["Blockly.JavaScript['应用于']","Blockly.JavaScript['是是是']","Blockly.Blocks['是是是']"]。arr.length变为3
i=1时,arr[1]="Blockly.JavaScript['是是是']", arr[1].indexOf('应用于') != -1为false
i=2时,同上

参考https://developer.mozilla.org...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文