JS Splice一个数组

时间:2017-09-08 17:43:09

标签: javascript arrays splice

我想拼接我的数组,所以我创建了这段代码:

System.log(finalcluster.length);
for (i=0; i <= finalcluster.length; i++){
    if (finalcluster[i] != undefined ){
        System.log(finalcluster[i][0]);
        var remove = finalcluster.indexOf("dump");
        if (finalcluster[i][0] == "dump")
        {
            System.log("couse dump");
            finalcluster.splice(remove,1);
        }
        else {
            System.log("No Problem");
        }
    }
}

在这段代码中有两个删除函数,我知道因为我尝试了一个整数i的索引。

当我执行此代码时,只删除了两个转储,我认为这两个转储之前但是在我的正确结果之后,还有另一个“转储”数组。为什么split不能移动它,因为它可以在关键字之前拼接数组。

数组:

[Name][Number]
[dump][0]
[dump][0]
[KEYWORD][KEYNUMBER]
[dump][0]
[dump][0]

这是阵列模型。

2 个答案:

答案 0 :(得分:1)

您的代码存在的一个问题是,在更改(递减)数组长度时,使用finalcluster按升序迭代finalcluster.length。因此,每次满足删除条件时,循环运行的次数减少1,这使得数组的尾部无法访问。例如:

// seems like this would empty out the array
let arr = [1, 2, 3, 4]
for (let i = 0; i < arr.length; i++) {
   arr.splice(i, 1)
}

console.log(arr); // [2, 4]

您可以通过以相反的顺序迭代finalcluster

来避免此问题

let arr = [1, 2, 3, 4]
for (let i = arr.length - 1; i >= 0; i--) {
   arr.splice(i, 1)
}

console.log(arr)

答案 1 :(得分:0)

如果你没有拼接或拼接并递减i,你需要增加i。到目前为止,你正在拼接和递增,这正在跳过你的背对背转储。

为了试图更好地解释它,你说转储是在索引1和2.如果你拼接在1,索引2的内容现在在索引1但是你让我看看索引2 .... / p>

System.log(finalcluster.length);
    for (i=0; i <= finalcluster.length;){
        if (finalcluster[i] != undefined ){
            System.log(finalcluster[i][0]);
            var remove = finalcluster.indexOf("dump");

            if (finalcluster[i][0] == "dump"){
                System.log("couse dump");
                finalcluster.splice(remove,1);

            }else {
                System.log("No Problem");
                i++;
            }
        }
    }

如果你不拼接,上面的代码将增加i。否则它会将i保持在当前索引处,以避免跳过索引。