javascript - for 循环中的 splice(),解决方案是什么?

标签 javascript arrays

我试图从这个名为“bigArray”的数组中删除重复项,同时保持数组的前三个位置不变(即使它们重复)。

我的问题是 for 循环内的 splice() 无法正常工作,因为每次拼接时,for 循环都会跳过数组的下一个位置(因为该位置比数组中低一个位置)。

如何让我的函数返回 [0,0,0,3,2]?

谢谢

var bigArray = [0,0,0,3,2,2,3,3,2];

function call() { 

  
  for (let i=3; i < (bigArray.length); i++) {
    if (bigArray.indexOf(bigArray[i]) !== i) {
          bigArray.splice(i,1);
    
    }

    }
    
    console.log(bigArray);
    return bigArray; 
}
    
call();

最佳答案

您正在使用运行循环的 splice() 修改数组。您必须使用第二个数组来存储非重复值。你可以这样做:

var bigArray = [0,0,0,3,2,2,3,3,2];
var noDuplicates = bigArray.slice(0,3);
function call() { 

  
  for (let i=3; i < (bigArray.length); i++) {
    if (bigArray.indexOf(bigArray[i]) === i) {
          noDuplicates.push(bigArray[i]);
    
    }

    }
    
    console.log(noDuplicates);
    return noDuplicates; 
}
    
call();

关于javascript - for 循环中的 splice(),解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44961259/

相关文章:

javascript - 使用 JQuery 的 Songkick API

javascript - 如何使用jquery隐藏父div中的任何子元素

C 数组和完整列表

javascript - 如何删除元素

asp.net - 返回 404 错误的脚本文件

javascript - 如何知道类何时更改/添加到 HTML 元素?

C 编程和数组、矩阵操作

java - 求数组中度数最大的最小子数组的长度

python - numpy.array() 等同于 numpy.stack(..., axis=0) 吗?

javascript - 每天在 5 :00 AM using firebase javascript 清除 firebase 数据库值