史上最全JavaScript数组去重的十种方法(推荐)

yizhihongxing

下面是对于“史上最全JavaScript数组去重的十种方法(推荐)”这篇文章的详细讲解。

1. 引言

文章介绍了在JavaScript中使用十种方法对数组进行去重的详细解析,旨在让读者学会如何在实际开发中解决数组去重问题。

2. 数组去重方法

2.1 使用Set

使用Set可以很方便地对数组进行去重,因为Set内部的元素是唯一的,所以会自动去除重复元素。

const arr = [1, 2, 2, 3, 3, 4, 5];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3, 4, 5]

2.2 使用indexOf

使用indexOf可以找出一个元素在数组中第一次出现的位置,因此遍历数组,对于元素第一次出现的位置保留,后续出现的则忽略。

const arr = [1, 2, 2, 3, 3, 4, 5];
const uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
  if (uniqueArr.indexOf(arr[i]) === -1) {
    uniqueArr.push(arr[i]);
  }
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]

2.3 使用includes

includes方法与indexOf类似,都是判断元素是否在数组中,但是includes返回的是true或false,可以更直观地进行判断。

const arr = [1, 2, 2, 3, 3, 4, 5];
const uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
  if (!uniqueArr.includes(arr[i])) {
    uniqueArr.push(arr[i]);
  }
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]

2.4 使用filter

使用filter可以过滤出符合条件的元素组成新的数组,结合indexOf可以实现数组去重。

const arr = [1, 2, 2, 3, 3, 4, 5];
const uniqueArr = arr.filter((item, index) => {
  return arr.indexOf(item) === index;
});
console.log(uniqueArr); // [1, 2, 3, 4, 5]

2.5 使用reduce

reduce方法可以通过累加器去除重复元素。

const arr = [1, 2, 2, 3, 3, 4, 5];
const uniqueArr = arr.reduce((acc, cur) => {
  if (!acc.includes(cur)) {
    acc.push(cur);
  }
  return acc;
}, []);
console.log(uniqueArr); // [1, 2, 3, 4, 5]

2.6 使用Map

使用Map也可以实现数组去重,因为它内部存储的是键值对,所以重复的元素会被自动去除。

const arr = [1, 2, 2, 3, 3, 4, 5];
const map = new Map();
const uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
  if (!map.has(arr[i])) {
    map.set(arr[i], true);
    uniqueArr.push(arr[i]);
  }
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]

2.7 使用递归

使用递归可以进行数组去重,每次取出一个元素,去掉之后的重复的元素组成新的数组,然后继续进行去重操作。

const arr = [1, 2, 2, 3, 3, 4, 5];
function unique(arr) {
  if (arr.length === 1) {
    return arr;
  }
  const first = arr[0];
  const rest = unique(arr.slice(1));
  if (rest.includes(first)) {
    return rest;
  } else {
    return [first, ...rest];
  }
}
console.log(unique(arr)); // [1, 2, 3, 4, 5]

2.8 使用双重循环

使用双重循环可以对数组进行去重,外层循环遍历每一个元素,内层循环判断是否有相同的元素。

const arr = [1, 2, 2, 3, 3, 4, 5];
const uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
  let isDuplicate = false;
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i] === arr[j]) {
      isDuplicate = true;
      break;
    }
  }
  if (!isDuplicate) {
    uniqueArr.push(arr[i]);
  }
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]

2.9 使用hash表

使用hash表可以对数组进行去重,遍历数组时,将元素存储在hash表中,并记录是否重复出现。

const arr = [1, 2, 2, 3, 3, 4, 5];
const uniqueArr = [];
const hashTable = {};
for (let i = 0; i < arr.length; i++) {
  if (!hashTable[arr[i]]) {
    hashTable[arr[i]] = true;
    uniqueArr.push(arr[i]);
  }
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]

2.10 使用ES6 Map和Set

使用ES6的Map和Set可以实现高效的数组去重。

const arr = [1, 2, 2, 3, 3, 4, 5];
const uniqueArr = Array.from(new Set(arr));
console.log(uniqueArr); // [1, 2, 3, 4, 5]

const map = new Map();
const uniqueArr2 = [];
for (let i = 0; i < arr.length; i++) {
  if (!map.has(arr[i])) {
    map.set(arr[i], true);
    uniqueArr2.push(arr[i]);
  }
}
console.log(uniqueArr2); // [1, 2, 3, 4, 5]

3. 总结

通过对十种数组去重方法的详细讲解和示例说明,读者可以更加深入地理解各种代码实现的方式和注意事项,同时也能更好地结合实际场景进行选择和使用。数组去重是JavaScript开发中经常遇到的问题,希望本文能为读者在实际开发中解决问题提供帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:史上最全JavaScript数组去重的十种方法(推荐) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JS获取url参数,JS发送json格式的POST请求方法

    JS获取url参数: 在JavaScript中获取url参数可以使用location对象的search属性或URLSearchParams API。 使用search属性: // 获取url参数 const urlParams = new URLSearchParams(window.location.search); // 获取具体参数 const id …

    JavaScript 2023年5月27日
    00
  • Java两个变量的互换(不借助第3个变量)具体实现方法

    Java两个变量的互换(不借助第三个变量)是一个常见面试题,面试者需要实现一种方法,使得交换两个变量的值而不借助第三个变量。本文将详细讲解一些实现方法及其代码示例。 方法一:使用加法与减法实现 通过加法和减法实现两个变量的互换的方法如下。 a = a + b; b = a – b; a = a – b; 其中a和b是要交换的两个变量。首先将a和b相加得到a …

    JavaScript 2023年6月10日
    00
  • javascript简单比较日期大小的方法

    下面是关于“JavaScript简单比较日期大小的方法”的完整攻略。 核心思路 在JavaScript中,我们可以先将日期转换成时间戳,在比较时间戳大小来实现比较日期的大小。具体步骤包括: 将日期转换成时间戳; 比较时间戳大小,即可得出日期的大小。 实现方法 方法一:使用Date对象 const date1 = new Date("2021-01-…

    JavaScript 2023年5月27日
    00
  • Javascript Math atan2() 方法

    JavaScript中的Math.atan2()方法用于返回从X轴正方向到点(x,y)的角度,即反正切值。该方法接受两个参数,即y和x,分别表示点的纵坐标和横坐标。以下是关于Math.atan2()方法的完整攻略,包括两个示例。 JavaScript Math对象的atan2()方法 JavaScript Math对象中的atan2()方法用于返回从X轴正方…

    JavaScript 2023年5月11日
    00
  • webpack-bundle-analyzer 插件配置使用方法

    下面是 webpack-bundle-analyzer 插件配置使用方法的详细攻略。 什么是 webpack-bundle-analyzer 插件 webpack-bundle-analyzer 是一个可视化分析工具,可以帮助我们分析打包结果。它会生成可视化报告,包含了打包后文件的大小、文件依赖等信息,让我们更加直观地了解打包结果,从而进行针对性的优化。 配…

    JavaScript 2023年6月10日
    00
  • js获取dom的高度和宽度(可见区域及部分等等)

    要获取DOM元素的宽度和高度,我们可以使用JavaScript中的clientWidth和clientHeight属性。这两个属性返回的是DOM元素的可视区域大小,不包括边框和外边距。以下是获取DOM元素宽度和高度的代码: const element = document.getElementById(‘myElement’); const elementW…

    JavaScript 2023年6月10日
    00
  • js实现从数组里随机获取元素

    实现从数组里随机获取元素有以下几种方式: 方法一:使用Math.random() 我们可以利用Math.random()方法生成一个0到1的随机数,将其乘上数组长度再向下取整得到一个0到数组长度-1的随机整数,最后使用该随机整数获取数组对应的元素。下面是一个示例代码: const arr = [1, 2, 3, 4, 5]; const randomIdx …

    JavaScript 2023年5月27日
    00
  • JavaScript中正则表达式判断匹配规则及常用方法

    JavaScript中正则表达式判断匹配规则及常用方法 正则表达式是一种强大的文本匹配工具,可以用于查找、替换和验证字符串。JavaScript中的正则表达式使用RegExp对象来创建和操作。 创建正则表达式 在JavaScript中,可以使用字面量或构造函数来创建正则表达式。 字面量创建 字面量使用斜杠(/)将正则表达式括起来,后接标志(可选)。例如: l…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部