【前端面试题】数组去重的不同类型的好几种方法

情形一:数组本身去重

//数组本身去重
function unique(array) {
    for (let i = 0; i < array.length; i++) {
        for (let j = i + 1; j < array.length; j++) {
            if (array[i] === array[j]) {
                array.splice(j, 1);
                j--
            }
        }
    }
}
let array = [1, 5, 2, 3, 6, 3, 2];
unique(array);
console.log('unique', array);//[1, 5, 2, 3, 6]

情形二:数组本身不去重

1、Set方式

// 1.Set方式
function unique1(array1) {
    console.log(new Set(array1))//Set(5) {1, 5, 2, 3, 6}
    //(1)方式1
    return [...new Set(array1)]
    //(2)方式2:Array.from可以创建新的、浅拷贝的数组
    return Array.from(new Set(array1))
}
const array1 = [1, 5, 2, 3, 6, 3, 2];
let result1 = unique1(array1);
console.log('unique1', result1);//[1, 5, 2, 3, 6]

2、通过 includes 判断的方式

// 2.通过 includes 判断的方式
function unique2(array2) {
    return array2.reduce((accu, cur) => {
        if (!accu.includes(cur)) {
            accu.push(cur)
        }
        return accu
    }, [])
}
const array2 = [1, 5, 2, 3, 6, 3, 2];
let result2 = unique2(array2);
console.log('unique2', result2);//[1, 5, 2, 3, 6]

3、Object.values的方式

// 3.Object.values(这种方式会直接按照索引进行升序)
function unique3(array3) {
    let result = array3.reduce((accu, cur) => {
        if (!accu[cur]) {
            accu[cur] = cur;
        }
        return accu
    }, {})
    console.log(result);//{1: 1, 2: 2, 3: 3, 5: 5, 6: 6}
    //Object.values
    return Object.values(result)
}
const array3 = [1, 5, 2, 3, 6, 3, 2];
let result3 = unique3(array3);
console.log('unique3', result3);//[1, 2, 3, 5, 6]

前端所有面试题源码地址:https://gitee.com/daiwanghao/front-end-interview-questions.git

以上就是数组去重的不同类型的好几种方法,请大家关注《前端面试题》专栏。
我会将自己平时项目中常见的问题以及笔试面试的知识在CSDN与大家分享,一起进步,加油。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@Dai

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

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

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

打赏作者

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

抵扣说明:

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

余额充值