JavaScript 数组去重的那几种方法

数组去重是最常见的面试题,现在总结一下我所知道的几种

首先第一个就是es5 最常见的循环比较

var array= [1, 1, 2];
function test(nums) {
        for (var i = 0; i < nums.length; i++) {
          for (var j = i + 1; j < nums.length; j++) {
            if (nums[i] === nums[j]) {
              nums.splice(j, 1);
              j--;
            }
          }
        }
    console.log(nums); 
    
}
test(array)    

第二种就是 ES6 的set 方法

var nums = [1, 1, 2];

function test(nums) {
   var set = new Set(nums);
    console.log(set); 

}
test(array)

第三种就是利用 indexOf 获取下标的方式来进行判断

var nums = [1, 1, 2];

function test(nums) {
    var arr = [];
        for (var i = 0; i < nums.length; i++) {
          if (arr.indexOf(nums[i]) === -1) {
            arr.push(nums[i]);
          }
        }
        console.log(arr); 

}
test(array)

第四种则是利用对象的特殊属性来进行判断

var nums = [1, 1, 2];

function test(nums) {
    var obj = {};
    var arr = [];
    for (let i = 0; i < nums.length; i++) {
       if (!obj[nums[i]]) {
          obj[nums[i]] = 1;
            arr.push(nums[i]);
          }
       }
        console.log(arr);
}
test(array)

第五种使用 数组的  includes  来进行筛选

var nums = [1, 1, 2];

function test(nums) {
   let arr = [];
   for (let i = 0; i < nums.length; i++) {
        if (!arr.includes(nums[i])) {
            arr.push(nums[i]);
          }
        }
   console.log(arr); 
}
test(array)

第六种方法则是利用原型上的  forEach 来进行筛选

var nums = [1, 1, 2];

function test(nums) {
    var arr = [];
        nums.forEach(item => {
          arr.includes(item) ? "" : arr.push(item);
        });
        console.log(arr);
}
test(array)

第七种则是先进行排序,然后再拿每一项和它的后面那一项进行比较,如果不同则加入新的数组

var nums = [1, 1, 2];

function test(nums) {
   var arr = [];
   var oldArr = nums.sort();
   for (let i = 0; i < oldArr.length; i++) {
      if (oldArr[i] != oldArr[i + 1]) {
         arr.push(oldArr[i]);
      }
   }
 console.log(arr);
}
test(array)

第八种就是利用 数组的 filter  进行过滤 

var nums = [1, 1, 2];

function test(nums) {
var newArr = nums.filter((item, index, arr) => {
          return arr.indexOf(item) === index;
        });
        console.log(newArr);
}
test(array)

  

posted @ 2019-12-10 15:03  沁猿春  阅读(206)  评论(0编辑  收藏  举报