数组去重

2021-03-27  本文已影响0人  樱桃小白菜

方法一

利用 ES6 新增的 Set 对象。
它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set 本身是一个构造函数,用来生成 Set 数据结构。
可以利用 Set 进行数组的去重, 并集, 交集,和差集。

//利用 set 求 数组的差集
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}
//利用 set 求 数组的并集
var a = [1, 2, 3]
var b = [4, 3, 2]
function arr(arr1,arr2) {
  return [...new Set([...a, ...b]) ]
 }

 console.log(arr(a,b))      // [1, 2, 3, 4]

方法二

利用双层循环的方法来去重

通过for 嵌套双层循环 利用数组的每一项与数组中全部项对比找出相同项。

for 嵌套 for,然后通过 push 将不同的元素添加到新数组

var array = [1, 1, '1', '1']

// 如果array[i]是唯一的,那么执行完循环,将array[i]添加到res中
function unique(array) {
  var res = []
  for (var i = 0, arrayLen = array.length; i < arrayLen; i++) {
    for (var j = 0, resLen = res.length; j < resLen; j++ ) {
      if (array[i] === res[j]) {
        break;
      }
    }
    if (j === resLen) {
      res.push(array[i])
    }
  }
  return res
}

console.log(unique(array)); // [1, "1"]

通过for 嵌套for,将数组的每一项与数组中全部项对比然后通过 splice() 删除重复项

var arr = 
[1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]
function unique(arr){
  for(var i=0; i<arr.length; i++){
    for(var j=i+1; j<arr.length; j++){
      if(arr[i]===arr[j]){
        arr.splice(j,1)
          j--
      }
    }
  }
  return arr
}
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}]

通过for循环数组中元素, 如果 indexOf 检测出 数组 res 中没有该项则添加到数组 res 中

var array = [1, 1, '1']

function unique(array){
  var res = []
  for(var i=0, len=array.length; i<len; i++){
    var ite = array[i]
    if(res.indexOf(ite) === -1){
      res.push(ite)
    }
  }
  return res
}

console.log(unique(array))

使用 sort 方法排序后,判断当前元素与上一个元素是否相同,删除相同项去重

var array = [1, 1, '1'];

function unique(array) {
    var res = []
    var sortedArray = array.concat().sort()
    var seen;

    for (var i = 0, len = sortedArray.length; i < len; i++) {
        // 如果是第一个元素或者相邻的元素不相同
        if (!i || seen !== sortedArray[i]) {
            res.push(sortedArray[i])
        }
        seen = sortedArray[i];
    }
    return res;
}

console.log(unique(array));

使用 filterindexOf 来简化循环

var array = [1, 1, '1'];

function unique(array){
  var res = [];
  array.filter((item,index,array) => {
    if(res.indexOf(array[index]) === -1){
      res.push(array[index])
    }
  })
  return res
}

console.log(unique(array))

参考:

JavaScript专题之数组去重

上一篇 下一篇

猜你喜欢

热点阅读