首页 > 编程语言 > 详细

面试重点----手写数组方法----数组去重

时间:2021-06-17 23:10:42      阅读:19      评论:0      收藏:0      [点我收藏+]

数组去重一个主要的思路就是:遍历原数组中的每个元素,判断新数组中是否已有该元素,若有,则不操作;若没有,则将该元素加入新数组。这个思路写成代码如下:

let arr = [1,2,3,5,4,6,2,3,1,1]
let arr2 = []
for(let i of arr){
   if(arr2.indexOf(i) == -1){
      arr2.push(i)
   }
}          

其中最关键的一步,就是“判断新数组中是否已有该元素”,上面使用了数组的indexOf方法,这一判断条件还可以替换成:

!arr2.includes(i) 

如果不使用已有的数组方法,那实现这个判断条件需要两层遍历,外循环遍历原数组,内循环遍历新数组,看上去相当笨拙:

let arr6 = []
arr6[0] = arr[0]
for (let i of arr) {
   for(let k of arr6){
      if (k == i) {
        break
      }
      if(k == arr6[arr6.length-1]){
        arr6.push(i)
      }
   }  
}

 

还可以利用数组的filter方法,我们注意到:对于多次出现的元素,其indexOf方法返回的只是它第一次出现的索引,因此可以把“元素的索引和其indexOf方法返回值”作为过滤条件,这相当于多个相同元素,只保留第一个。

let arr4 = arr.filter( (item, index, self) => {
   return self.indexOf(item) == index
})
console.log(arr4)

我们知道集合最大的特点就是其中没有重复的元素,而数组与集合之间的转化其实很简单(这应该是最简单的方法):

let s = new Set(arr)
let arr3 = [...s]

 

面试重点----手写数组方法----数组去重

原文:https://www.cnblogs.com/creationMarvel/p/14897601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!