注意目录和修改相同的字符编码

数组去重

一、ES6最常用Set去重

Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。

function unique(arr) {
  return Array.from(new Set(arr))
}
let arr = [1, 1, 'true', 'true', true, true, 15, 15];
console.log(unique(arr))            // [ 1, 'true', true, 15 ]
 
let unique2 = arr => [...new Set(arr)]
console.log(unique2(arr));        //  [ 1, 'true', true, 15 ]
 

二、双重for循环

外层循环元素,内层循环时比较值。

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]) {                    //第一个等同于第二个,splice方法删除第二个
        arr.splice(j, 1);
        j--;
      }
    }
  }
return arr;
}
let arr = [1, 1, 'true', 'true', true, true, 15, 15];
console.log(unique(arr)    // [ 1, 'true', true, 15 ]

 

三、indexOf或includes去重

当数组内没有该元素时,indexOf返回-1,则把它push进新数组。

function unique(arr) {
  var array = [];
  for (var i = 0; i < arr.length; i++) {
    if (array .indexOf(arr[i]) === -1) {
      array .push(arr[i])
    }
  }
  return array;
}
includes() 方法用于判断字符串是否包含指定的子字符串。如果找到匹配的字符串则返回 true,否则返回 false。

function unique(arr) {
  var array = [];
  for (var i = 0; i < arr.length; i++) {
    if (!array.includes( arr[i]) ) {
      array .push(arr[i])
    }
  }
  return array;
}

 

四、filter去重

原始数组中元素的索引等于当前索引值时返回,否则返回当前元素

function unique(arr) {
  var res = arr.filter(function(item, index, array) {
    return array.indexOf(item) === index
  })
  return res
}

 

posted @ 2021-04-14 13:13  黑使  阅读(48)  评论(0编辑  收藏  举报