2017-07-07 39 views
1

我试图从数组中移除重复称为“bigArray”,同时保持数组的三个第一个位置不变(即使他们重复)。splice()在for循环中,解决方案是什么?

我的问题是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();

+1

所以你不应该修改原始数组..尝试使用的过滤器() – guijob

回答

0

你应该减去我。

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); 
 
    \t \t \t i--; 
 
    } 
 
\t \t 
 
    } 
 
    
 
    console.log(bigArray); 
 
    return bigArray; 
 
} 
 
    
 
call();
其他

+0

喔...我没有想到这样简单的事情!但是,为什么有人低估了这个解决方案? – Emilio

+0

嗯,我不知道@Emilio。但这很简单。我希望这可以帮助你。谢谢。 –

3

您正在使用拼接修改阵列()在其上运行的循环。您必须使用第二个数组来存储不重复的值。你可以做这样的事情:

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

一种方式来做到这一点。

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

希望这对你有所帮助!

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) 
相关问题