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!