Js中数组去重的几种方法

1.利用Set 方法去重

let nums = [1,4,3,2,5,9,8,3,2,3,4,8]

function removeDuplicate(nums) {
    let set = new Set(nums);
    return Array.from(set)
   // return Array.from(new Set(nums)); } console.log(removeDuplicate(nums));

2.利用Array indexOf, lastIndexOf ,includes,some

arr.indexOf(searchElement[, fromIndex]) 首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
arr.lastIndexOf(searchElement[, fromIndex])  数组中该元素最后一次出现的索引,如未找到返回-1。
arr.includes(valueToFind[, fromIndex]) 
    返回一个布尔值 Boolean ,如果在数组中找到了(如果传入了 fromIndex ,表示在 fromIndex 指定的索引范围中找到了)则返回 true 。
arr.some(callback(element[, index[, array]])[, thisArg]) 
    数组中有至少一个元素通过回调函数的测试就会返回true;所有元素都没有通过回调函数的测试返回值才会为false。
function removeDuplicate(nums) {
    let n = nums.length;
    let newArr = []
    for(let i=0;i<n;i++){
        //if(newArr.indexOf(nums[i]) === -1){
        // if(newArr.lastIndexOf(nums[i]) === -1){
        // if(newArr.includes(nums[i]) === false){
        if(newArr.some((num)=>num===nums[i]) === false){
            newArr.push(nums[i])
        }

    }
    return newArr;
}
console.log(removeDuplicate(nums));
3.利用 array.filter
var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
function removeDuplicate(nums) {
    return nums.filter((num,index,arr)=>{
        return arr.indexOf(num) === index;
    })
}
console.log(removeDuplicate(nums));
4.利用 Map
myMap.set(key, value);
myMap.has(key); 如果指定元素存在于Map中,则返回true。其他情况返回false
function removeDuplicate(nums) {
    let n = nums.length;
    let map = new Map();
    for(let num of nums){
        if(!map.has(num)){
            map.set(num,0);
        }
    }
    return Array.from(map.keys());
}
console.log(removeDuplicate(nums));
5.利用 reduce
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
 1)如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。
 2)如果数组为空且没有提供initialValue,会抛出TypeError 。
 3)如果数组仅有一个元素(无论位置如何)并且没有提供initialValue, 或者有提供initialValue但是数组为空,那么此唯一值将被返回并且callback不会被执行。
function removeDuplicate(nums) {
    let res = nums.reduce((acc,cur)=>{
        if(acc.indexOf(cur) === -1){
            acc.push(cur);
        }
        return acc;
    },[]);
    return res;
}
console.log(removeDuplicate(nums));

暂时总结了这么多,欢迎大家一起讨论。

posted @ 2021-05-28 11:22  尖子  阅读(1464)  评论(0编辑  收藏  举报