Home  >  Article  >  Web Front-end  >  An example of JS implementation of array deduplication

An example of JS implementation of array deduplication

零下一度
零下一度Original
2017-07-16 14:52:481319browse

A question that must be prepared for the front-end interview: How to remove duplicates of Javascript's Array. As far as I know, Baidu, Tencent, Shanda, etc. have all asked this question in interviews. This question seems simple, but in fact it contains hidden dangers. The test is not only about realizing this function, but also about your in-depth understanding of computer program execution.

Method 1:

Use splice to operate directly on the original array

Double-layer loop, Outer loop elements, when comparing the values ​​

in the inner loop, if the values ​​are the same, delete this value

Note: After deleting the element, you need to change the length of the array Also minus 1.

Array.prototype.distinct = function (){
  var arr = this,
    i,
    j,
    len = arr.length;
  for(i = 0; i < len; i++){
    for(j = i + 1; j < len; j++){
      if(arr[i] == arr[j]){
        arr.splice(j,1);
        len--;
        j--;
      }
    }
  }
  return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

Advantages: simple and easy to understand

Disadvantages: high memory usage and slow speed

Method 2:

Double-layer loop, outer loop element, compare value during inner loop

If there are the same values, skip them, if not, push them into the array

Array.prototype.distinct = function(){
  var arr = this,
    result = [],
    i,
    j,
    len = arr.length;
  for(i = 0; i < len; i++){
    for(j = i + 1; j < len; j++){
      if(arr[i] === arr[j]){
        j = ++i;
      }
    }
    result.push(arr[i]);
  }
  return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();       //返回[3,4,2,1]

Method 3: Use the object’s attributescannot have the same characteristics to remove duplicates

Array.prototype.distinct = function (){
  var arr = this,
    i,
    obj = {},
    result = [],
    len = arr.length;
  for(i = 0; i< arr.length; i++){
    if(!obj[arr[i]]){  //如果能查找到,证明数组元素重复了
      obj[arr[i]] = 1;
      result.push(arr[i]);
    }
  }
  return result;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

Method 4: ArrayRecursionRemove duplication

##Use the idea of ​​recursion

Sort first, then compare from the end, if they are the same, delete them


Array.prototype.distinct = function (){
  var arr = this,
    len = arr.length;
  arr.sort(function(a,b){    //对数组进行排序才能方便比较
    return a - b;
  })
  function loop(index){
    if(index >= 1){
      if(arr[index] === arr[index-1]){
        arr.splice(index,1);
      }
      loop(index - 1);  //递归loop函数进行去重
    }
  }
  loop(len-1);
  return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];
var b = a.distinct();
console.log(b.toString());    //1,2,3,4,5,6,45,56

Method Five: Use indexOf and forEach


Array.prototype.distinct = function (){
  var arr = this,
    result = [],
    len = arr.length;
  arr.forEach(function(v, i ,arr){    //这里利用map,filter方法也可以实现
    var bool = arr.indexOf(v,i+1);    //从传入参数的下一个索引值开始寻找是否存在重复
    if(bool === -1){
      result.push(v);
    }
  })
  return result;
};
var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];
var b = a.distinct();
console.log(b.toString());  //1,23,2,3

Method 6: Use ES6’s set

Set data structure, which is similar to an array, and the values ​​of its members are all unique.

Use Array.from to convert the Set structure into an array


function dedupe(array){
  return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]

Expand

Operator(...) uses for internally. ..of loop

let arr = [1,2,3,3];
let resultarr = [...new Set(arr)];  
console.log(resultarr); //[1,2,3]

The above is the detailed content of An example of JS implementation of array deduplication. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn