方法
Set 去重
let arr = [1,1,5,5,7,8,7,8,9,'ture','ture',{},{}]
function uniq (arr) {
return Array.from( new Set(arr))
}
console.log(uniq(arr))
// [1, 5, 7, 8, 9, "ture", {…}, {…}]
// 使用 Set 方法所使用的代码最少,但是当有 {} 的时候会没有作用,无法去除 {} 空对象
for 嵌套 for ,然后 splice 去重
let arr = [1,1,5,5,7,8,7,8,9,'ture','ture',{},{},null,null]
function uniq(arr){
for(let i=0
for(let j=i+1
if(arr[i]===arr[j]){ // 两次遍历后,如果 arr[i] 等于 arr[j] 时,删除掉后者
arr.splice(j,1)
j--
}
}
}
return arr
}
console.log(uniq(arr))
// [1, 5, 7, 8, 9, "ture", {…}, {…}, null] // 同样的空 {} 还是无法去重
// 双层循环,外层循环元素,内层循环时比较值。值相同时,则删去后面这个值
indexOf 去重
let arr = [1,1,5,5,7,8,7,8,9,'ture','ture',{},{},null,null]
function uniq(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
let array = [];
for (let i = 0; i < arr.length; i++) {
if (array .indexOf(arr[i]) === -1) {
array .push(arr[i])
}
}
return array;
}
console.log(uniq(arr))
利用对象的 hasOwnProperty 去重
let arr = [1,1,5,5,7,8,7,8,9,'ture','ture',{},{},null,null]
function uniq(arr) {
let obj = {};
return arr.filter(function (item, index, arr) {
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
})
}
console.log(uniq(arr))
Map 去重
let arr = [1,1,5,5,7,8,7,8,9,'ture','ture',{},{},null,null]
function uniq(arr) {
let map = new Map();
let array = new Array();
for (let i = 0; i < arr.length; i++) {
if (map.has(arr[i])) {
map.set(arr[i], true);
} else {
map.set(arr[i], false);
array.push(arr[i]);
}
}
return array;
}
console.log(uniq(arr))
字典结构——用来存储不重复key的hash结构。不同于集合(set)的是,字典使用的是键值对的形式来存储数据
本篇文章借鉴了这里 作为学习记录