数组去重

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>

 

posted @ 2020-04-12 18:10  strongerPian  阅读(277)  评论(0编辑  收藏  举报
返回顶端