前端进阶之数组去重

467 阅读1分钟

数组去重

数组去重是开发中经常会碰到的一个热点问题,使用for循环嵌套是比较常用的方式。

弊端:

  • 代码显得臃肿且长
  • 时间复杂度高
  • 难以维护

Array.from与set去重(普通数组)

Array.from方法可以将Set结构转换为数组结果,而我们知道Set结果是不重复的数据集,因此能够达到去重的目的

function unique(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return
    }
    return Array.from(new Set(arr))
}

补充:Set 是ES6新增的一个数据接结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。

数组对象去重

const arr = [{ name: 'name1', id: 1 }, { name: 'name2', id: 2 }, { name: 'name3', id: 3 }, { name: 'name1', id: 1 }, { name: 'name4', id: 4 }, { name: 'name5', id: 5 }];
 const result = [];
 arr.forEach(item=>{
    !result.some(v => JSON.stringify(v) === JSON.stringify(item)) && result.push(item)
 })
 console.log(result) 
 //[{ name: 'name1', id: 1 },{ name: 'name2', id: 2 },{ name: 'name3', id: 3 },{ name: 'name4', id: 4 },{ name: 'name5', id: 5 }]

数组删除指定项(会改变原数组)

arr.splice(arr.indexOf(i), 1)
//i为要删除的元素

补充:Array.splice()会根据元素的index删除