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)