Home >Web Front-end >JS Tutorial >Six ways to remove duplicates from JS arrays

Six ways to remove duplicates from JS arrays

小云云
小云云Original
2018-03-07 13:22:572073browse

Method 1:

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

This article mainly shares with you six methods of deduplicating JS arrays, hoping to help everyone.

Array.prototype.distinct =function(){
 vararr = 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]);
 }
 returnresult;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();   //返回[3,4,2,1]

Method 2: Use splice to operate directly on the original array

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

If the values ​​are the same, delete them Remove this value

Note: After deleting elements, you need to reduce the length of the array by 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, speed Slow

Method 3: Use the properties of objects that cannot be the same 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: Recursive deduplication of arrays

Use the idea of ​​recursion

First sort, and then compare from the end. If there are similarities, delete

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 5: 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 set

Set data structure, which is similar to an array, the values ​​of its members are 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]

The expansion operator (...) uses a for...of loop internally

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

The following will be added to everyone Introducing the method of merging arrays and removing duplicates

1. concat() method

Idea: The concat() method merges the incoming array or non-array value with the original array to form a new array and return. This method will generate a new array.

function concatArr(arr1, arr2){
  var arr = arr1.concat(arr2);
  arr = unique1(arr);//再引用上面的任意一个去重方法
  return arr;
}

2. Array.prototype.push.apply()

Idea: The advantage of this method is that it does not generate a new array.

var a = [1, 2, 3];
var b = [4, 5, 6];
Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6]
//等效于:a.push.apply(a, b);
//也等效于[].push.apply(a, b); 
function concatArray(arr1,arr2){
  Array.prototype.push.apply(arr1, arr2);
  arr1 = unique1(arr1);
  return arr1;
}

Related recommendations:

Detailed explanation of js array deduplication and deflattening

Array deduplication parsing in JavaScript and Python

Sharing several ways to remove duplicates from JavaScript arrays

The above is the detailed content of Six ways to remove duplicates from JS arrays. 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