使用 Set
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用,所以当你放入一个数组,它会自动去掉重复的值
const array = [1, 1, 2, 4, 5, 3, 7, 7];
[... new Set(array)]
// [1, 2, 4, 5, 3, 7]
使用 filter()
filter() 方法创建一个新数组, 通过给定的条件来返回新的数组
const array = [1, 1, 2, 4, 5, 3, 7, 7];
array.filter((item, index) => array.indexOf(item) === index);
// [1, 2, 4, 5, 3, 7]
使用 Map()
map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值
const array = [1, 1, 2, 4, 5, 3, 7, 7];
function unique (arr) {
const seen = new Map()
return arr.filter((a) => !seen.has(a) && seen.set(a, 1))
}
使用 indexOf
当你传入一个参数的时候,它会返回入参数的索引值。如果未找到就返回 -1
function unique(arr){
var result = [];
for(let i = 0; i<arr.length; i++){
if(result.indexOf(arr[i]) === -1){
result.push(arr[i]);
}
}
return result;
}
使用 hash
使用保存数组值,判断数组值是否存在hash中,true表示记录保存
function unique(arr){
var result = [], hash = {};
for(let i = 0; i < arr.length; i++){
if(!hash[arr[i]]){
hash[arr[i]] = true;
result.push(arr[i])
}
}
return result;
}
使用 sort方法
利用sort方法先对数组进行排序,然后再遍历数组,将和相邻元素不相同的元素挑出来
function unique(arr) {
if (!Array.isArray(arr)) return;
arr = arr.sort((a, b) => a - b);
var result = [arr[0]];
for (var i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i-1]) {
result.push(arr[i]);
}
}
return result;
}