数组去重

219 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

高频面试题:数组去重的方法?

例如:

var preArr = [101, 200, 101, 30, 43, 50, 101]

1、利用es6set数据不重复的特点

var arr = Array.from(new Set(preArr))

2、利用es6map键值对记录存在状态

var arr = [];
var mapRecord = new Map()
preArr.map(v => {
    if (!mapRecord.has(v)) {
        arr.push(v);
    }
    mapRecord.set(v, true)
})

当然这里的mapRecord可以改为熟悉的对象,这里的map遍历可以通过适当的修改改为forEachforreduce等常用函数。

3、利用es6中数组的includes方法

var arr = [];
for (let i =0; i < preArr.length; i++) {
    !arr.includes(preArr[i]) && arr.push(preArr[i])
}

4、利用对象键值不重复的特点

var arr = []
var obj = {}
for (let i = 0; i < preArr.length; i++) {
    obj[preArr[i]] = preArr[i]
}
var arr = Object.values(obj)

5、利用数组索引覆盖的特点

var arr = [];
var indexArr = []
for (let i = 0; i < preArr.length; i++) {
    indexArr[preArr[i]] = preArr[i]
}
arr = Object.values(indexArr)

6、利用函数也拥有对象属性的特点

var arr = [];
var fn = function () {};
for (let i = 0; i < preArr.length; i++) {
    fn[preArr[i]] = preArr[i]
}
arr = Object.values(fn)