indexOf() lastIndexOf() 实现数组去重
// indexOf() lastIndexOf() 实现数组去重
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
for(let i = 0; i < arr.length; i++){
// i 作为数组的索引值
// console.log(arr[i]);
// 判断是否存在重复的值
// 第一次出现位置的索引值和最后一次出现位置的索引值不相等
if(arr.indexOf(arr[i]) != arr.lastIndexOf(arr[i])){
// 出现多次,可以删除一个元素,对原数组进行改变
arr.splice(i,1);
// console.log('长度',arr.length);
// 每次删除后,数组的长度发生改变,但是i++始终执行;导致循环提前结束;因此需要长度和索引值保持一致
i--;
}
// console.log('索引值',i);
}
console.log(arr);
//[ 2, 3, 4, 5, 1 ]
借助空数组实现去重
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
let newArr=[];
for(let i = 0;i < arr.length;i++){
// 在新数组中检索原数组中的每个值 不存在则为-1
if(newArr.indexOf(arr[i]) == -1){
// 不存在则添加
newArr.push(arr[i]);
}
}
console.log(newArr);//[ 1, 2, 3, 4, 5 ]
通过两次循环实现数组去重
// 两次循环实现数组去重
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
for(let i = 0; i < arr.length; i++){
for(let j = i + 1; j < arr.length; j++){
if(arr[i] == arr[j]){
// 如果相等,则证明重复了 删除
arr.splice(j, 1);
j--;
}
}
}
console.log(arr); //[ 1, 2, 3, 4, 5 ]
倒叙遍历数组进行去重
// 倒叙遍历数组进行去重 可以不用考虑数据删除后下标改变造成的影响
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
for(let i = arr.length - 1; i >= 0; i--){
for(let j = i - 1; j >= 0; j--){
if(arr[i] == arr[j]){
arr.splice(j, 1)
}
}
}
console.log(arr); //[ 2, 3, 4, 5, 1 ]
通过ES6 set()实现数组去重
let arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 1, 1, 1];
let res = [...new Set(arr)];
console.log(res);//[ 1, 2, 3, 4, 5 ]