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

时间:2017-07-07 01:36:46

标签: 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();
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:2)

您正在使用运行循环的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();

答案 1 :(得分:1)

另一种方法。

    function finddup(arr){
      var tmp = [];
      for(var i = 0; i < arr.length; i++){
         if(i<3)
         {
          tmp.push(arr[i]);
         }
        else
        if(tmp.indexOf(arr[i]) == -1)
         {
         tmp.push(arr[i]);
         }
     }
    return tmp; 
     }

希望这对你有帮助!

答案 2 :(得分:1)

如果您正在寻找功能性方法:

var arr = [0,0,0,3,2,2,3,3,2];
arr.filter((e,i,self) => i<3 ? true : self.findIndex(x=>x === e) === i)

答案 3 :(得分:0)

你应该减去i。

&#13;
&#13;
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);
    			i--;
    }
		
  }
    
    console.log(bigArray);
    return bigArray; 
}
    
call();
&#13;
&#13;
&#13;