复杂数组去重的常用方法

本文详细介绍了数组去重的多种方法,包括使用Set、indexOf、includes、reduce、Map以及filter+indexOf等。对于复杂数组,通过JSON.stringify转换后再进行去重,确保了对象类型的元素也能正确处理。同时,文章提供了多个示例代码,帮助读者理解并应用这些方法。
摘要由CSDN通过智能技术生成

目录

一、复杂数组去重

1. 用set

2. 不用set 

二、简单数组去重

1: 利用 Set

2: 利用 indexOf

3: 利用 includes

4:利用 reduce

5:利用 Map

5:利用 fliter+indexOf


一、复杂数组去重

1. 用set

        function unique(arr) {
            let res = new Set();
            return arr.filter((item) => {
                let id = JSON.stringify(item);
                if (res.has(id)) {
                    return false;
                } else {
                    res.add(id);
                    return true;
                }
            })
        }
        var arr = [123, "webpank", [1, 2, 3], "123", { a: 1 }, "tencent", 123, [1, 2, 3], { a: 1 }];
        console.log(unique(arr));

        // const readline = require('readline');
        // const rl = readline.createInterface({
        //     input: process.stdin,
        //     output: process.stdout
        // });
        // rl.on('line', (line) => {
        //     let arr = JSON.parse(line)
        //     console.log(unique(arr))
        // });

2. 不用set 

       const uni = (temp) => {
            const arr = [];
            const map = new Map();
            for (let i = 0; i < temp.length; i++) {
                let mid;
                // console.log(typeof temp[i]);
                if (typeof temp[i] === "object") {
                    mid = temp[i];
                    temp[i] = JSON.stringify(temp[i]);
                }
                if (map.has(temp[i])) {
                    map.set(temp[i], true);
                } else {
                    map.set(temp[i], false);
                    if (typeof mid === "object") {
                        temp[i] = JSON.parse(temp[i]);
                    }
                    arr.push(temp[i]);
                }
            }
            console.log(arr);
            return arr
        }

二、简单数组去重

1: 利用 Set

function uniq(arry) {
    return [...new Set(arry)]
}

2: 利用 indexOf

function uniq(arry) {
    var result = [];
    for (var i = 0; i < arry.length; i++) {
        if (result.indexOf(arry[i]) === -1) {
            //如 result 中没有 arry[i],则添加到数组中
            result.push(arry[i])
        }
    }
    return result
}

3: 利用 includes

function uniq(arry) {
    var result = [];
    for (var i = 0; i < arry.length; i++) {
        if (!result.includes(arry[i])) {
            //如 result 中没有 arry[i],则添加到数组中
            result.push(arry[i])
        }
    }
    return result;
}

4:利用 reduce

function uniq(arry) {
    return arry.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
}

5:利用 Map

function uniq(arry) {
    let map = new Map();
    let result = new Array();
    for (let i = 0; i < arry.length; i++) {
        if (map.has(arry[i])) {
            map.set(arry[i], true);
        } else {
            map.set(arry[i], false);
            result.push(arry[i]);
        }
    }
    return result;
}

5:利用 fliter+indexOf

function uniq(arr) {
   return arr.filter(function(item, index, arr) {
         //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
         return arr.indexOf(item, 0) === index;
    });
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白目

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值