一维数组&多维数组去重的几个实现方法

本文探讨了在JavaScript中如何有效地去除一维和多维数组的重复元素,涵盖了基本方法到ES6的新特性,包括使用Set、reduce、双重循环等策略,旨在提供多种解决方案供开发者选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 一维数组去重

// 使用 Set
const removeRepeat = arr => {
    return [...new Set(arr)]
}

// 使用数组遍历
const removeRepeat = arr => {
    const newArr = []
    arr.forEach(item => {
        if (!newArr.includes(item)) {	// 也可以用 indexOf
            newArr.push(item)
        }
    })
    return newArr
}

// 使用 filter 配合 indexOf
const removeRepeat = arr => {
    return arr.filter((item, index) => arr.indexOf(item) === index)
}

// ===========================================================================

// 多维数组去重
const removeMultiRepeat = arr => {
    // 将多维数组转换为一维数组
    const flat = arr => {
        let newArr = []
        arr.forEach(item => {
            if (Array.isArray(item)) {
                newArr = newArr.concat(flat(item))
            } else {
                newArr.push(item)
            }
        })
        return newArr
    }

    return [...new Set(flat(arr))] //  也可以改用上面的 removeRepeat 方法
}

removeMultiRepeat([1, [2, 3], [2, [8, 9, 1], [4, [5, 8]]]]) //  [1, 2, 3, 8, 9, 4, 5]
// 使用 Array.prototype.flat 方法,传入 Infinity 可以直接将多维数组转一维
[...new Set([1, [2, 3], [2, [8, 9, 1], [4, [5, 8]]]].flat(Infinity))]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值