给定一个数组:[1,6,3,5,2,4,1,2,6,9,12,2];
js 数组去重有很多种方法,但是时间复杂度都不尽相同。除了最基础的暴力破解是 O(n * n) 甚至更高的时复杂度外,我们需要追求的肯定是更加性能优越的解法。
使用 Hash
这是一个时间复杂度为 O(n),的解法,主要是使用了对象属性的不可重复性:
function duplicateRemova (arr) {
let newArr = [];
let obj = {};
let len = arr.length;
for (let i = 0; i < len; i++) {
if (!obj[arr[i]]) {
obj[arr[i]] = 1;
newArr.push(arr[i]);
}
}
return newArr;
}
ES6 new Set()
ES6 提供了新的数据结构 Set,它的结构类似于数组,但是它的成员都是唯一的,意味着整个数据结构中没有重复的值
function duplicateRemova (arr) {
let newArr = Array.from(new Set(arr));
return newArr;
}
暴力破解 时间复杂度 O(n * n)
function duplicateRemova (arr) {
return arr.filter((item, index, arr) => {
arr.indexOf(item) === index;
}) //第一次出现的的元素下标才等于下标
}