数组去重
数组去重是开发中经常会碰到的一个热点问题,使用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删除