数组去重
1、for循环遍历去重
1 <script> 2 // 重复的元素只保留一个 3 var arr = [4,2,5,7,2,6,2,6,6,5] 4 console.log(arr) 5 // 使用循环依次比较,遇到重复的就删除 6 // 比较length-1趟 7 for (var i = 0; i < arr.length - 1; i++) { 8 // 当前这一趟比较从i+1开始 9 // 比较的终点length-1 10 for (var j = i+1; j < arr.length; j++) { 11 if (arr[i] === arr[j]) { 12 arr.splice(j, 1) 13 // 删完以后j-1抵消for里的++确保不跳过重复的值 14 j-- 15 } 16 } 17 } 18 console.log(arr) 19 </script>
2,、forEach遍历去重
1 <script> 2 var arr = [4,2,4,5,7,2,6,2,6,6,5] 3 // 利用对象的属性名不冲突完成去重 4 // 可以把数字作为对象的属性名 5 // var obj = { 6 // 4: 'lisi' 7 // } 8 // console.log(obj[4]) 9 10 // 遍历数组,判断当前数组元素作为对象属性名是否能取到值 11 // 如果取不到,说明这是第一次遍历到当前值,就把当前元素作为对象属性名赋个值 12 // 如果取到了,说明之前已经赋过值了,也就是说当前值不是第一次出现 13 14 var obj = {} 15 var arr1 = [] 16 arr.forEach(function (item) { 17 // 把item作为属性名到对象里去取值看能不能取到 18 if (obj[item]) { 19 // 取到值了,说明item不是第一次出现,item是一个无效值,就不用push到arr1里,这里就什么都不用做 20 } else { 21 // 取不到值,说明item是第一次出现 22 // 就给他赋个值 23 // item是第一次出现,他是我们要保留的值 24 obj[item] = true 25 arr1.push(item) 26 } 27 }) 28 29 // arr.forEach(function (item) { 30 // // 把item作为属性名到对象里去取值看能不能取到 31 // if (!obj[item]) { 32 // // 取不到值,说明item是第一次出现 33 // // 就给他赋个值 34 // obj[item] = 'a' 35 // arr1.push(item) 36 37 // } 38 // // else 就不用写了 39 // // else { 40 // // // 取到值了,说明item不是第一次出现 41 // // } 42 // }) 43 44 console.log(arr1) 45 </script>
3、Set 强制去重
1 <script> 2 var arr = [4,2,4,5,7,2,6,2,6,6,5] 3 4 // ES6的写法,把数组写成Set,Set是Es6新增的数据类型,默认不允许重复的 5 // 但是把数组变成Set了,再使用Array.from重新转换成数组,就可以了 6 7 var arr1 = Array.from(new Set(arr)) 8 console.log(arr1) 9 </script>