首先:
!Array.isArray(arr) 判断是否为数组
1.Set方法
let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr) {
return Array.from(new Set(arr));
}
unique(arr1);
该方法处理多个数组的去重是比较方便,代码如下:
let array1 = [1, 2, 3, 4];
let array2 = [2, 3, 4, 5, 6];
let uniqueArray = new Set([... array1, ... array2]);
console.log('uniqueArray:', uniqueArray);
2.Map方法:
let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr){
let map = new Map();
let array = 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);
array.push(arr[i]);
}
}
return array;
}
unique(arr1);
Map对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
Map 的实例属性和操作方法
- size:返回成员总数
- set(key, value):添加新的键值
- get(key):读取键对应的值
- has(key):是否有某个键
- delete(key):删除某个键
- clear():清空
Map实例的遍历方法
- keys():返回键名的遍历器。
- values():返回键值的遍历器。
- entries():返回键值对的遍历器。
- forEach():遍历 Map 的所有成员。
3.indexOf方法
let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr) {
var arr2 = [];
for (let i = 0; i < arr.length; i++) {
if (arr2.indexOf(arr[i]) === -1) {
arr2.push(arr[i]);
}
}
return arr2;
}
unique(arr1)
简化:
let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr) {
var arr2 = [];
for (let i = 0; i < arr.length; i++) {
arr2.indexOf(arr[i]) === -1 ? arr2.push(arr[i]) : [];
}
return arr2;
}
unique(arr1);
4.利用双for循环,然后splice去重(ES5)
let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr){
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]==arr[j]){ //第一个等同于第二个,splice方法删除第二个
arr.splice(j,1);
j--;
}
}
}
return arr;
}
unique(arr1)
5.sort()方法
let arr1 = [5, 5, 9, 9, 6, 3, 5, 4, 8, 6, 4, 5];
function unique(arr) {
arr = arr.sort()
var arrry= [arr[0]];
for (var i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i-1]) {
arrry.push(arr[i]);
}
}
return arrry;
}
unique(arr1)