JavaScript 数组去重方法合集(简洁易懂)

JavaScript数组去重

JavaScript去重的七种方法 简单易懂
方法一:暴力去重法

// 暴力去重法
function ArrayIsUnique (array) {
    if (!Array.isArray(array)) return;

	for (let i = 0; i < array.length; i++) {
		if (array[i] === array[i + 1]) {
			array.splice(i, 1);
			i--;
		}
	}

    return array
}

方法二:Set方法

// Set方法去重
function ArrayIsUnique2 (array) {
    if (!Array.isArray(array)) return;

    const map = new Set(array)

    return Array.from(map)
}

方法三:Map方法

// Map方法去重
function ArrayIsUnique3 (array) {
    if (!Array.isArray(array)) return;

    const map = new Map()
    array.forEach(item => map.set(item, item))

    return Array.from(map.values())
}

方法四:先排序再去重

// 先排序再去重
function ArrayIsUnique4 (array) {
    if (!Array.isArray(array)) return;
    
    array.sort()
    
    for (let i = 0; i < array.length; i++) {
        if (array[i] === array[i + 1]) {
            array.splice(i, 1)
        }
    }

    return array
}

方法五:indexof方法去重

// 定义一个新数组 如果没有就存进去
function ArrayIsUnique5 (array) {
    if (!Array.isArray(array)) return;

    const arr = []

    array.forEach(item => {
        if (arr.indexOf(item) === -1) {
            arr.push(item)
        }
    })

    return arr
}

方法六:使用includes方法

function ArrayIsUnique6 (array) {
    if (!Array.isArray(array)) return;

    const arr = []

    array.forEach(item => {
        if (!arr.includes(item)) {
            arr.push(item)
        }
    })

    return arr
}

方法七:filter方法

function ArrayIsUnique7 (array) {
    if (!Array.isArray(array)) return;

    let arr = array.map(item => item)

    array.forEach(item => {
        arr = arr.filter(i => item !== i)
        arr.push(item)
    })

    return arr
}

效率最高的数组去重方法是使用 Map 或 Set 数据结构来进行去重,使用 Set 或 Map 的好处在于它们内部使用了哈希表来存储数据,因此可以快速判断一个元素是否已经存在于集合中,同时还能够保证集合中的元素是唯一的,从而实现快速的数组去重。同时, Set 和 Map 在处理大规模数据时的效率远远高于使用 indexOf、includes、splice 等方法进行去重。

如有错误 可指出修改 谢谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值