js数组去重的三种方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
// 数组去重
var arr = [1, 2, 1, 3, 4, 5, 6, 4, 5, 3, 2, 1, 2, 3, 4, 5, 6]
// 方法1:
// 借助一个新的数组
// var newArr = []
// 遍历原始数组
// for (var i = 0; i < arr.length; i++) {
// // arr[i] 就是数组中的每一个
// // console.log(arr[i])
// // 把数组中的每一个都添加到新的数组里面
// // 但是不是全添加,新数组中没有的我才添加,如果新数组中有,我就不添加了
// // 判断新数组中没有我
// if (newArr.indexOf(arr[i]) === -1) {
// newArr.push(arr[i])
// }
// }
/*
i === 0 newArr.indexOf(arr[0]) === -1 newArr.push(arr[0])
i === 1 newArr.indexOf(arr[1]) === -1 newArr.push(arr[1])
i === 2 newArr.indexOf(arr[2]) === -1
i === 3 newArr.indexOf(arr[3]) === -1 newArr.push(arr[3])
*/
// console.log(newArr)
// 方法2: 先排序,如果前一个和后一个一样,随便干掉一个
arr.sort(function (a, b) { return a - b })
for (var i = 0; i < arr.length; i++) {
if (arr[i] === arr[i + 1]) {
arr.splice(i, 1)
i--
//由于数组的塌陷,当删除一个元素时,另外一些元素的索引值会发生改变,故每删除一个就要要减一,保持对应
}
}
console.log(arr)
// var arr2 = [1, 2, 3, 4]
/*
i === 0 arr2 === [2, 3, 4] len === 3
i === 1 arr2 === [2, 4] len === 2
i === 2 结束循环
*/
/*
i === 0 arr2 === [2, 3, 4] len === 3 i === -1
i === 0 arr2 === [3, 4] len === 2 i === -1
i === 0 arr2 === [4] len === 1 i === -1
i === 0 arr2 === [] len === 0 i === -1
i === 0 结束循环
*/
// for (var i = 0; i < arr2.length; i++) {
// arr2.splice(i, 1)
// //
// i--
// }
// console.log(arr2)
//方法3: ES6的Set数据类型
const s = new Set(arr)
const newArr = [...s]
console.log(newArr)
</script>
</body>
</html>