美文网首页
js数组去重方法的总结

js数组去重方法的总结

作者: 小强不是蟑螂啊 | 来源:发表于2019-04-15 14:45 被阅读0次

    一般大公司面试的时候,都会问一些常见的问题,但是这些问题看着简单,面试官问了怎么解决后,你说了一种,面试官又问还有吗,你又说了一种,还有吗,这时候你就要疯了,所有我们平常在工作中,不是解决这个问题就万事大吉了,还要想一想除了这个解决办法,还有哪些,尽量做些总结。

    最常见的就是数组的去重问题,或者有哪些元素是重复元素或者不是重复元素,我来进行一次总结,想到的就是一下五种:

    1 将数组的元素作为空对象的属性,然后进行累加,如果最后属性值是1,就不是重复元素,如果大于1就是重复元素,这种解法一般是数组里的元素是基本类型数组,如果是复杂类型就会失败

      function clean(nums) {
        var obj = Object.create(null);
        var arr = [];
        for(var i =0;i<nums.length;i++){
            obj[nums[i]] ? obj[nums[i]]++:obj[nums[i]]=1;
        }
        for(let key in obj ){
            if(obj[key] == 1){
                arr.push(key)
            }
        }
        return arr
    };
    

    2 使用ES中的Set

    function clean(nums) {
      return [...new Set(nums)]  //或者 return Array.form(new Set(nums))
    };
    

    3 使用indexof,返回的值与当前的位置相同即可

    function clean(nums) {
      var arr = [];
      for(let i=0;i<nums.length;i++){
          if(nums.indexOf(nums[i]) == i){
              arr.push(nums[i])
          }
      }
      //或者也可以这么些 arr =  nums.filter(item=>{nums.indexOf(nums[i]) == i});
    
      return arr;
    };
    

    4 对数组进行排序,如果前面一个不等于后面一个即放入新数组

    function clean(nums) {
      var arr = [];
      nums.sort(function(a,b){return a-b});
      if(nums.length ==0) return [];
      if(nums.length == 1) return [nums[0]]
      if(nums[0] != nums[1]) arr.push(nums[0])
      for(var i =1;i<nums.length;i++){
          if(nums[i] != nums[i-1]){
              arr.push(nums[i])
          }
      }
      return arr;
    };
    

    5 双重循环,找到重复的删除,返回原数组

    function clean(arr){
        for (var i = 0; i < arr.length; i++) {
            for (var j = 0; j < arr.length; j++) {
                if (arr[i] == arr[j] && i != j) {//将后面重复的数删掉
                    arr.splice(j, 1);
                }
            }
        }
        return arr;
    }

    相关文章

      网友评论

          本文标题:js数组去重方法的总结

          本文链接:https://www.haomeiwen.com/subject/nujuwqtx.html