JS 数组去重

1.使用Set将数组转换为Set对象,Set对象会自动去除重复元素,之后再将Set对象转换为数组;Array.from()方法是将一个类数组对象可遍历对象转换成一个真正的数组。

var arr = [1, 2, 2, 4, 3, 5];
var newArr = Array.from(new Set(arr));
console.log(newArr); // [1,2,3,4,5]

2.使用Set+扩展运算符去重。

var arr = [1,2,2,4,3,5];
var newArr = [... new Set(arr)];
console.log(newArr); //[1,2,3,4,5]

3.使用Map()去重。其本质也是键值对,只是其键不局限于普通对象的字符串。

let list = ['你是最棒的2', 8, 8, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 1, 2, 3, 4, 5, 6, 7, 8, '你是最棒的2',]
let newList3 = [];
let map = new Map()
list.forEach((item) => {
    if (!map.has(item)) {//如果item不存在就设置key和value,若map存在item就不执行
        map.set(item,ture)
        newList3.push(item)
    }
})
console.log('newList3', newList3);

4.使用indexOf()去重,方法可返回某个指定的字符串值在字符串中首次出现的位置

var arr = [1,2,2,4,3,5];
function unique(arr) {
    var Arr = [];
    for (var i = 0; i < arr.length; i++) {
        if (Arr.indexOf(arr[i]) === -1) {
            Arr.push(arr[i])
        }
    }
    return Arr;
}
console.log(unique(arr)); //[1,2,3,4,5]

5.使用includes去重,判断一个数组是否包含一个指定的值,如果是返回 true,否则false。


var arr = [1,2,2,4,3,5];
let newArr = [];
arr.forEach((item) => {
    if (!newArr.includes(item)) {
        newArr.push(item);
    }
});
console.log(newArr); //[1,2,3,4,5]

6.组合Map和filter方法去重。

var arr = [1,1,2,undefined,undefined,NaN,NaN];
function unique(arr){
    var map = new Map();
    return arr.filter((a)=> !map.has(a) && map.set(a,1));
}
var newArr = unique(arr);
console.log(newArr); //[1,undefined,NaN]

7.组合filter+inidexOf方法去重:通过filter()方法遍历数组,返回仅包含首次出现的元素的新数组。

var arr = [1,2,2,4,3,5];
var newArr = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(newArr); // [1,2,3,4,5]

8.组合reduce+inicludes方法去重:通过reduce()方法遍历数组,将元素存储在一个临时对象中,每次遇到重复元素时将其跳过,最后返回所有不重复元素的数组。

var arr = [1,2,2,4,3,5];
var newArr = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
console.log(newArr); // [1, 2, 3, 4, 5]

9.使用for嵌套for,然后splice去重(es5常用)。外层循环元素,内层循环时比较值。值相同时,则删去这个值。

function unique(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] == arr[j]) {  //若第一个等同于第二个,splice方法删除第二个
                arr.splice(j, 1);
                j--
            }
        }
    }
    return arr
}
var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN,NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
console.log(unique(arr))
//[1, "true", 15, false, undefined, NaN, NaN, "NaN", "a", {…}, {…}]     //NaN和{}没有去重,两个null直接消失了

10.利用对象的属性不能相同的特点去重(这种数组去重有问题不推荐)。

function unique(arr) {
    var Arr = [];
    var obj = {};
    for (var i = 0; i < arr.length; i++) {
        if (!obj[arr[i]]) {
            Arr.push(arr[i])
            obj[arr[i]] = 1
            console.log(obj[arr[i]])
        } else {
            obj[arr[i]]++
            console.log(obj[arr[i]])
        }
    }
    return Arr;
}
var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN,NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
console.log(unique(arr))
//[1, "true", 15, false, undefined, null, NaN, 0, "a", {…}] //两个true直接去掉了,NaN和{}去重

11.利用hasOwnProperty判断是否存在对象属性来去重。

function unique(arr) {
    var obj = {};
    return arr.filter(function(item, index, arr){
        return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
    })
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
    console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}]   //所有的都去重了

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值