一、使用数组的indexOf方法判断
/*
* 新建一空数组,值不在新数组就push进该新数组中
* IE8以下不支持数组的indexOf方法
* */
function uniq(arr) {
var arr1 = [];
for(var i = 0; i < arr.length; i++) {
if(arr1.indexOf(arr[i]) == -1) {
arr1.push(arr[i])
}
}
return arr1;
}
var arr = ['a','b','a',1, 2, 1]
console.log(uniq(arr))
二、利用对象的键值 key唯一性去重
/**
* 注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”
* 所以给key值添加了类型前缀,是为了区分类似1和"1"
*/
function uniq(arr) {
var temp = {}, arr1 = [];
for(var i = 0; i < arr.length; i++) {
var key = (typeof arr[i]) + arr[i];
if(!temp[key]) {
temp[key] = true;
arr1.push(arr[i]);
}
}
return arr1
}
var arr = ['a','b','a',1, 2, 1]
console.log(uniq(arr))
三、使用es6中的includes方法
function uniq(arr) {
var arr1 = [];
arr.forEach(v => {
if(!arr1.includes(v)) {
arr1.push(v)
}
})
return arr1;
}
var arr = ['a','b','a',1, 2, 1]
console.log(uniq(arr))
四、es6的set
/**
* ES6里新添加了Set和Array.from。
* set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目, 返回的是一个对象。
* Array.from的作用,就是可以把类数组对象、可迭代对象转化为数组。
*/
function uniq(arr) {
return Array.from(new Set(arr))
}
var arr = ['a','b','a',1, 2, 1]
console.log(uniq(arr))