「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」
首先我们定义一个含重复内容的数组变量:
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{},{name:"jack"},{name:"jack"}];
function unique(arr){
……
}
console.log(unique(arr));
1、使用ES6新增Set()方法去重
function unique(arr){
return Array.from(new Set(arr))
}
//注意:使用Set方法去重的时候,返回的值为set对象
//可通过Array.form方法将其转换成数组
Set() 方法去重的时候不用考虑兼容性问题,但是无法去掉“{}”空对象
2、双层循环,逐一对比
function unique(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) { //j+1是指,当前下标为i的元素的下一个
if (arr[i] == arr[j]) {
arr.splice(j, 1); //当数组中的元素被删除一个之后,后面值的下标随之改变
j--; //进行--操作
}
}
}
return arr;
}
执行逻辑一定要分析清楚!
3、利用数组的pop()、push()或shift()、unshift() 以及indexOf()进行比对操作
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!');
return;
}
let array = [];
array.push(arr[0]);
for (let i = 1; i < arr.length; i++) {
//检测数组中是否存在某个值的方法:includes()、indexof()、
/*if (array.indexOf(arr[i]) === -1) { //indexOf方法,当值不存在时返回-1
array.push(arr[i]);
}*/
if (!array.includes(arr[i])) {
array.push(arr[i]);
}
}
return array;
}
indexof和includes方法进行的是==>先push—后检测—存在—跳过
4、将数组转换为对象的名称与值的形式存储,然后在执行筛查
?
//未完待续!明日更新