JavaScript数组去重的8种常用方法详解

作者:纸飞机时间:2026-10-23 21:43:18浏览:379

本文汇总了JavaScript中8种常用的数组去重方法,包括利用对象属性、Set数据结构、for循环与splice、indexOf判断、sort排序、filter结合对象、Map数据结构以及reduce配合include等技巧。每种方法均提供完整代码示例与运行结果,帮助开发者根据实际场景选择最优方案。

JavaScript数组去重的8种常用方法详解

在JavaScript开发与学习中,数组去重是一项高频需求。本文将分享8种经过实战验证的数组去重方案,这些方法均具有实际应用价值,建议开发者收藏并深入学习。

利用对象属性去重

1. 利用对象属性

该方法基于对象属性名唯一性的特点来实现去重。


var arr = ['qiang','ming','tao','li','liang','you','qiang','tao'];
console.time("nonredundant1");
var nonredundant1 = Object.getOwnPropertyNames(arr.reduce(function(seed, item, index) {
  seed[item] = index;
  return seed;
},{}));
console.timeEnd("nonredundant1");
console.log(nonredundant1);

运行结果如下:

JavaScript数组去重的8种常用方法详解

使用Set数据结构去重

2. 使用Set数据结构

set是一种类似数组的结构,但是set成员中没有重复的值。set()函数可以接受一个数组或者类数组的参数,生成一个set对象。而Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object和可遍历iterable)的对象包括 ES6 新增的数据结构 Set 和 Map)。


var arr = ['qiang','ming','tao','li','liang','you','qiang','tao'];
function unique (arr) {
  return Array.from(new Set(arr))
}
console.time("nonredundant2");
var nonredundant2 = unique(arr);
console.timeEnd("nonredundant2");
console.log(nonredundant2);

运行结果如下:

JavaScript数组去重的8种常用方法详解

使用for循环和splice去重

3. 使用for循环和splice


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;
}
console.time("nonredundant3");
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
var nonredundant3 = unique(arr);
console.timeEnd("nonredundant3");
console.log(nonredundant3);

运行结果如下:

JavaScript数组去重的8种常用方法详解

使用indexOf判断去重

4. 使用indexOf判断去重


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;
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant4");
var nonredundant4 = unique(arr);
console.timeEnd("nonredundant4");
console.log(nonredundant4);

运行结果如下:

JavaScript数组去重的8种常用方法详解

使用sort排序去重

5. 使用sort排序去重


function unique(arr) {
  arr = arr.sort()
  var arrry = [arr[0]];
  for (var i = 1; i < arr.length; i++) {
    if (arr[i] !== arr[i - 1]) {
      arrry.push(arr[i]);
    }
  }
  return arrry;
}

var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant5");
var nonredundant5 = unique(arr);
console.timeEnd("nonredundant5");

运行结果如下:

JavaScript数组去重的8种常用方法详解

使用filter去重

6. 使用filter


function unique(arr) {
  var obj = {};
  return arr.filter(function(item, index, arr){
    return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
  })
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant6");
var nonredundant6 = unique(arr);
console.timeEnd("nonredundant6");
console.log(nonredundant6);

运行结果如下:

JavaScript数组去重的8种常用方法详解

使用Map数据结构去重

7. 使用Map数据结构去重


function unique(arr) {
  let map = new Map();
  let array = new Array(); // 数组用于返回结果
  for (let i = 0; i < arr.length; i++) {
    if (map.has(arr[i])) { // 如果有该key值
      map.set(arr[i], true);
    } else {
      map.set(arr[i], false);  // 如果没有该key值
      array.push(arr[i]);
    }
  }
  return array;
}

var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant7");
var nonredundant7 = unique(arr);
console.timeEnd("nonredundant7");
console.log(nonredundant7);

运行结果如下:

JavaScript数组去重的8种常用方法详解

使用reduce和include去重

8. 使用reduce和include去重


function unique(arr){
  return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant8");
var nonredundant8 = unique(arr);
console.timeEnd("nonredundant8");
console.log(nonredundant8);

运行结果如下:

JavaScript数组去重的8种常用方法详解

以上内容为本文的全部总结,希望能为各位的学习带来帮助,欢迎持续关注本站获取更多信息。

作者最新文章