双层for循环
let arr = [1,2,3,7,9,3,3,4,10,10,10,5,6,1,2,8,3];
for (let i = 0; i < arr.length; i++) {
for (let j = i+1,len=arr.length; j < len; j++) {
if ( arr[i] === arr[j] ) {
arr.splice(j,1);
j--;
len--;
}
}
}
console.log(arr); // [1, 2, 3, 7, 9, 4, 10, 5, 6, 8]
console.log(arr.sort((a,b)=>a-b)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
使用双层for循环,用循环1的第( i )个和循环2的第( i+1 )个做比对,
每当第一个for循环执行一次,循环2执行 arr的长度减1次
当判断 第 arr的i 位置和 arr的j 位置 相等时,删除二次比对 arr内的j 位置
同时 j减一 和 len减一,因为arr数组删除了一位,需要更新循环次数
ES6 Set 去重
let arr = [1,2,3,7,9,3,3,4,10,10,10,5,6,1,2,8,3];
function arrFun(arr) {
return Array.from(new Set(arr));
}
console.log([...new Set(arr)]); // [1, 2, 3, 7, 9, 4, 10, 5, 6, 8]
console.log( arrFun(arr) ); // [1, 2, 3, 7, 9, 4, 10, 5, 6, 8]
console.log(arrFun(arr).sort((a,b)=>a-b)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
数组 array.indexOf 去重
let arr = [1,2,3,7,9,3,3,4,10,10,10,5,6,1,2,8,3];
let res = [];
for (let i = 0; i < arr.length; i++) {
if ( res.indexOf(arr[i]) === -1 ) {
res.push(arr[i]);
}
}
console.log(res); // [1, 2, 3, 7, 9, 4, 10, 5, 6, 8]
循环 arr 数组 并 检测 res数组里面 有没有 数组第i个元素,没有就添加到数组,有就不添加。
递归调用 去重
需要将数据进行排序后才可以
let arr = [1,2,3,7,9,3,3,4,10,10,10,5,6,1,2,8,3];
function fun1(arr) {
let arr1 = arr;
let len = arr1.length;
arr1.sort((a,b)=>a-b);
function loop(i) {
if ( i >= 1 ) {
if ( arr1[i] === arr1[i-1] ) {
arr1.splice(i,1);
}
loop(i-1);
}
}
loop(len-1);
return arr1;
}
console.log( fun1(arr) ); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Array.filter 去重
function unique(arr) {
var res = arr.filter(function(item, index, array) {
return array.indexOf(item) === index
})
return res
}
indexOf 返回数组里第一次出现的位置
filter 该方法返回的是原始数组的一个子集