法一:indexOf循环去重
function unique1(arr) {
var newArr = []
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i])
}
}
return newArr
}
console.log(unique1([1, 2, 3, 1, 2, 3, "a", "a", "b"]));
// 结果是[1, 2, 3, "a", "b"]
法二:ES6 Set去重:Array.from(new Set(array));
function unique2(arr) {
//Set数据结构(无重复元素),它类似于数组,其成员的值都是唯一的
return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组
}
console.log(unique2([1, 2, 3, 1, 2, 3, "a", "a", "b"]));
// 结果是[1, 2, 3, "a", "b"]
法三:Object键值对去重:把数组的值存成Object的key值,比如Object[value1] = true,在判断另一个值得时候,如果Object[value2]存在的话,就说明该值是重复的。
var arr = [1, 2, 3, 1, 2, 3, "a", "a", "b"];
function unique3(arr) {
let map = new Map();
let result = new Array(); // 数组用于返回结果
for (let i = 0; i < arr.length; i++) {
if (map.has(arr[i])) { // 判断 map 中是否已有该 key 值
map.set(arr[i], true); // 后面的true 代表该 key 值在原始数组中重复了,false反之
} else { // 如果 map 中没有该 key 值,添加
map.set(arr[i], false);
result.push(arr[i]);
}
}
return result;
}
console.log(unique3(arr));//[1, 2, 3, "a", "b"]