Home > Web Front-end > JS Tutorial > body text

Summary of several methods to achieve array deduplication in js

巴扎黑
Release: 2017-07-18 18:24:07
Original
1548 people have browsed it

Method 1:

  1. Double-layer loop, outer loop element, compare value when inner loop

  2. If there is the same value If it is different, it will be pushed 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]
Copy after login

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

  1. Double-layer loop, outer loop element, compare value when inner loop

  2. If the value is the same, delete this value

Notes: 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
Copy after login

Advantages: Simple and easy to understand
Disadvantages: High memory usage and slow speed

Method 3: Use the properties of objects that cannot be the same to deduplicate

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
Copy after login

Method 4: Array recursion Remove duplicates

  1. Use recursive thinking

  2. Sort first, then compare from the end, if they are the same, 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
Copy after login

Method 5: Using 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
Copy after login

Method 6: Using ES6's set

Set data structure 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]
Copy after login

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

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

The above is the detailed content of Summary of several methods to achieve array deduplication in js. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!