//封装方法,参数为数组
function q(arr) {
// 外部循环获取前面需要对比的初始数
for (var i = 0; i < arr.length; i++) {
// 内部循环获取后面需要与前面对比的比较数
for (var j = i + 1; j < arr.length; j++) {
// 如果后面出现与前面相同的数则进入if判断内
if (arr[i] == arr[j]) {
// 用数组方法删除后面相同的数
arr.splice(j, 1)
// 删除数组内的数后,数组长度发生变化
// 循环j自增,会导致向前替位的数无法进行比较
// 所以进行自减继续从替位位置进行比较
j--
}
}
}
return arr
}
数组去重
在数组中删除重复出现的项
调用方法进行数组去重
var arr1 = [1, 4, 2, 1, 1, 2, 2, 3, 4, 4, 3, 3]
// 输出去重后的数组
console.log(q(arr1))
结果:(4) [1, 4, 2, 3]
双重for循环运行逻辑
数组:[1, 4, 2, 1, 1, 2, 2, 3, 4, 4, 3, 3]
下标: 0 1 2 3 4 5 6 7 8 9 10 11 数组下标从0开始
用1与其他数对比,删除后面重复出现的1
[1,4,2,2,2,3,4,4,3,3]
用4与其他数对比,删除后面重复出现的4
[1,4,2,2,2,3,3,3]
用2与其他数对比,删除后面重复出现的2
[1,4,2,3,3,3]
用3与其他数对比,删除后面重复出现的3
[1,4,2,3]
j--的解释
↓
[1,4,2,1,1,2,2,3,4,4,3,3]
[1,4,2,1,2,2,3,4,4,3,3]
在1进行对比找到第一个重复的1时,删除后面重复出现的1,数组长度发生变化,后续数向前替位
但循环中替位上来的数这个位置已经进行了对比,j++会导致跳过向前替位的这个数的比较
所以在对比删除重复的数后需要进行j--,确保循环继续从替位的位置进行对比