javascript - Splice() 不会使数组为空

标签 javascript arrays array-splice

我有数组 x、y 和 z。 在遍历 x 时,根据条件我需要不断从 z 中删除元素。这是我正在尝试做的事情:

var x = ["test0", "test1", "test2"];
var y = ["test0", "test1", "test2"];
var z = ["test0", "test1", "test2"];

function myFunction(){
    for (var i=0; i<x.length; i++){
        for (var j=0; j<y.length; j++){
            if(x[i] == y[j]){
                z.splice(i,1);
            }
        }

    }
document.getElementById("demo").innerHTML = z;
}

在迭代结束时,z 应该为空。但它总是向我显示剩余的“test1”元素。 由于没有拼接正确的索引,我尝试执行 z.splice(i--,1) 但这也不起作用。

请告知解决此问题的最佳方法是什么?

最佳答案

如果您创建某种表格,这很容易理解。问题是第一次拼接后,z的索引不像x和y的索引:

x[0] = j[0] : i = 0 -> z.splice(0, 1); - test0 is removed - z = ["test1", "test2"];
x[1] = j[1] : i = 1 -> z.splice(1, 1); - test2 is removed - z = ["test1"];
x[2] = j[2] : i = 2 -> z.splice(2, 1); - nothing is removed - z = ["test1"];

解决方法:

function myFunction() {
    var removed = 0; // removed items counter
    for (var i = 0; i < x.length; i++) {
        for (var j = 0; j < y.length; j++) {
            if (x[i] == y[j]) {
                z.splice(i - removed, 1); // subtract removed counter from index
                removed++; // increment removed counter
            }
        }

    }
}

关于javascript - Splice() 不会使数组为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32161292/

相关文章:

java - java中数组元素向左移动

javascript - 如何检查特定列的所有行中是否包含 "abc"

javascript - 尝试在 2 个奇数之间插入破折号。错误 : Illegal return statement

javascript - 使用 vue JS 中的索引从数组中删除项目返回意外结果

javascript - 使用javascript查找数组中任意两对元素之间的最小绝对差时出错

javascript - 如何使用 javascript 更改在 php 中执行的 html 元素的属性

javascript - php中单引号之间发送参数

javascript - 如何使用javascript显示提交时的所有错误

javascript - Angular/Typescript 二维数组问题