代码之家  ›  专栏  ›  技术社区  ›  Emilio

在for循环中,解决方案是什么?

  •  1
  • Emilio  · 技术社区  · 8 年前

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

    如何使函数返回[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();
    4 回复  |  直到 8 年前
        1
  •  2
  •   Dij    8 年前

    您正在使用运行循环的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();
        2
  •  1
  •   Rohit Padma    8 年前

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

    希望这对你有帮助!

        3
  •  1
  •   guijob    8 年前

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

    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)
    
        4
  •  0
  •   Pablo Darde    8 年前

    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();