一、ES6最常用Set去重
Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。
function unique(arr) { return Array.from(new Set(arr)) } let arr = [1, 1, 'true', 'true', true, true, 15, 15]; console.log(unique(arr)) // [ 1, 'true', true, 15 ] let unique2 = arr => [...new Set(arr)] console.log(unique2(arr)); // [ 1, 'true', true, 15 ]二、双重for循环
外层循环元素,内层循环时比较值。
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;
}
let arr = [1, 1, 'true', 'true', true, true, 15, 15];
console.log(unique(arr) // [ 1, 'true', true, 15 ]
三、indexOf或includes去重
当数组内没有该元素时,indexOf返回-1,则把它push进新数组。
function unique(arr) { var array = []; for (var i = 0; i < arr.length; i++) { if (array .indexOf(arr[i]) === -1) { array .push(arr[i]) } } return array; } includes() 方法用于判断字符串是否包含指定的子字符串。如果找到匹配的字符串则返回 true,否则返回 false。function unique(arr) {
var array = [];
for (var i = 0; i < arr.length; i++) {
if (!array.includes( arr[i]) ) {
array .push(arr[i])
}
}
return array;
}
四、filter去重
原始数组中元素的索引等于当前索引值时返回,否则返回当前元素
function unique(arr) { var res = arr.filter(function(item, index, array) { return array.indexOf(item) === index }) return res }