【问题标题】:JS Splice an ArrayJS拼接一个数组
【发布时间】:2017-09-09 02:52:03
【问题描述】:

我想拼接我的数组,所以我创建了这个sn-p代码:

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

在这段代码中有两个删除函数,我知道是因为我尝试过 indexof 一个整数 i。

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

数组:

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

这就是数组模型。

【问题讨论】:

  • 拼接会改变数组。因此,当您进行迭代时,只要您拼接一个元素,您的索引就会跳转一个索引。尝试简单地使用finalCluster = finalCluster.filter(cluster =&gt; cluster[0] !== "dump");
  • 也许你可以展示一个实际数组的例子而不是伪代码版本,因为你的意思不清楚。
  • 这里是make数组函数,几行之后我把finalcluster[1][0] = "school"; finalcluster[1][1] = 1。这就是我要过滤的关键 finalcluster = new Array(5); for (i = 0; i

标签: javascript arrays splice


【解决方案1】:

您的代码的一个问题是您在更改(递减)数组长度的同时使用finalcluster.length 以升序迭代finalcluster。因此,每次满足删除条件时,循环运行的次数都会减少 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)

【讨论】:

    【解决方案2】:

    如果你不拼接,你要么需要增加 i,要么需要拼接并减少 i。截至目前,您正在拼接和递增,这正在跳过您的背靠背转储。

    为了更好地解释它,您说转储位于索引 1 和 2。如果您在 1 处拼接,则索引 2 处的内容现在位于索引 1,但您让我查看索引 2....

    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 保持在其当前索引以避免跳过索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-23
      • 2015-02-14
      • 2017-03-11
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 2021-03-03
      相关资源
      最近更新 更多