js面试题(二)

1 数组去重

方法1 思路:将数组先排序 相同的元素排在一起,然后找一个对比项,从头开始对比 相同的则删除 不同则将不同的作为对比项继续对比

var arr=[2,6,9,1,3,4,8,1,2,6,6,3,8,5]
    function test(arr) {
        arr=arr.sort();//[1,1,2,2,3,3,4,,5,6,6,6,,8,8,9]
        var flag=arr[0]
       for(i=1;i<arr.length;i++){
            debugger
           if(flag==arr[i]){
               arr.splice(i,1)
               i--//因为删除了数组的一项 长度随之减一,遍历下一项i++之前要先--
           }else{
               flag=arr[i]
           }
       }
       console.log(arr)//[1,2,3,4,5,6,8,9]
    }
    test(arr)

方法2 思路:借助一个新的空数组作为容器,将要去重的数组的数据依次放入这个新数组中,每次放之前先遍历一下 看看新数组是否有这个数据,有就不放,没有就放

var arr=[2,6,9,1,3,4,8,1,2,6,6,3,8,5]
    function test(arr) {
      var result=[arr[0]]//先把数组第一项放进来,遍历时就不用遍历第一项了 直接从第二项开始遍历
        for(var i=1;i<arr.length;i++){
          if(exist(arr[i])){
              continue
          }else{
              result.push(arr[i])
          }
        }
        function exist(flag) {
             for(var i=0;i<result.length;i++){
                 if(flag==result[i]){
                     return true
                 }
             }
             return false
        }
        return result
    }
   console.log(test(arr)) 


 方法3 思路借助json的key不能重复这一特点进行解题(一般字符串去重 数组去重 都可以用这一思想解决)
         我们创建一个json对象遍历数组,把遍历的元素加入到json上,key和value都是数组当前元素 ,
         这样遍历完一遍生成的json的key就是不重复的数组元素了,再遍历json,将key加入到一个新数组中,新数组就是我们要求的去重后的结果了
var arr=[2,6,9,1,3,4,8,1,2,6,6,3,8,5]
    function test(arr) {
     var result=[];
     var obj={}
     for(var i=0;i<arr.length;i++){
         if(!obj[arr[i]]){
             obj[arr[i]]=arr[i]
         }
         debugger
     }
     console.log(JSON.stringify(obj))
     for(var e in obj){
         result.push(e)
     }
        return result
    }
   console.log(test(arr))//[1,2,3,4,5,6,8,9]

方法4 借助es6 set  set是不可重复的集合

var array=[1,2,3,4,5,4,3,2,2,2,3,3,4,5]
    var set=new Set([...array])
    console.log(new Array([...set]))




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值