js数组去重的11种方法

下面是详细讲解“js数组去重的11种方法”的完整攻略。

引言

在JavaScript开发中,常常需要我们对数组进行去重的操作。由于JavaScript本身没有提供去重的方法,开发者需要结合一些技巧和方法来完成这个任务。本文将由浅入深介绍11种JavaScript数组去重的方法,希望对大家有所帮助。

方式一:使用Set类型

Set是一种新的ES6数据类型,它存储的是独一无二的值,可以用来轻松去重。具体代码如下:

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

方式二:使用Map类型

Map是JavaScript中的一种数据结构,它存储键值对,可以用来解决数组去重的问题。具体代码如下:

const arr = [1, 2, 3, 2, 1];
const map = new Map();
const newArr = [];

arr.forEach(item => {
  if (!map.has(item)) {
    map.set(item, true);
    newArr.push(item);
  }
});

console.log(newArr); // [1,2,3]

方式三:使用Object类型

利用对象属性唯一的特性,我们可以使用Object类型进行数组去重。具体代码如下:

const arr = [1, 2, 3, 2, 1];
const obj = {};
const newArr = [];

arr.forEach(item => {
  if (!obj[item]) {
    obj[item] = true;
    newArr.push(item);
  }
});

console.log(newArr); // [1,2,3]

方式四:使用filter方法

使用filter方法可以遍历数组,返回由符合条件元素组成的新数组。具体代码如下:

const arr = [1, 2, 3, 2, 1];
const newArr = arr.filter((item, index, arr) => {
  return arr.indexOf(item) === index;
});

console.log(newArr); // [1,2,3]

方式五:使用reduce方法

使用reduce方法可以遍历数组,返回一个新的累加结果,可以用来进行数组去重。具体代码如下:

const arr = [1, 2, 3, 2, 1];
const newArr = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);

console.log(newArr); // [1,2,3]

方式六:使用for循环

使用for循环可以遍历数组,使用indexOf方法判断当前元素是否已经存在于新的数组中。具体代码如下:

const arr = [1, 2, 3, 2, 1];
const newArr = [];

for (let i = 0; i < arr.length; i++) {
  if (newArr.indexOf(arr[i]) === -1) {
    newArr.push(arr[i]);
  }
}

console.log(newArr); // [1,2,3]

方式七:使用includes方法

使用includes方法判断当前元素是否已经存在于新的数组中,如果不存在则添加到新数组中。具体代码如下:

const arr = [1, 2, 3, 2, 1];
const newArr = [];

arr.forEach(item => {
  if (!newArr.includes(item)) {
    newArr.push(item);
  }
});

console.log(newArr); // [1,2,3]

方式八:使用some方法

使用some方法可以遍历数组,判断是否有一个元素符合条件,可以用来进行数组去重。具体代码如下:

const arr = [1, 2, 3, 2, 1];
const newArr = [];

arr.forEach(item => {
  if (!newArr.some(val => val === item)) {
    newArr.push(item);
  }
});

console.log(newArr); // [1,2,3]

方式九:使用排序去重

使用数组排序可以去除重复元素,具体代码如下:

const arr = [1, 2, 3, 2, 1];
const newArr = [];

arr.sort().forEach((item, index, arr) => {
  if (item !== arr[index - 1]) {
    newArr.push(item);
  }
});

console.log(newArr); // [1,2,3]

方式十:使用集合算法去重

使用集合算法可以将复杂度优化到O(n),具体代码如下:

const arr = [1, 2, 3, 2, 1];
const newArr = Array.from(new Set(arr));

console.log(newArr); // [1,2,3]

方式十一:使用链表

使用链表可以在保证去重效果的同时,避免数组在删除元素时造成的性能问题。具体代码如下:

class Node {
  constructor(data) {
    this.data = data;
    this.next = null;
  }
}

class LinkedList {
  constructor() {
    this.head = null;
    this.tail = null;
  }

  add(data) {
    const node = new Node(data);

    if (!this.head) {
      this.head = node;
      this.tail = node;
    } else if (this.tail.data !== data) {
      this.tail.next = node;
      this.tail = node;
    }

    return this;
  }

  toArray() {
    const arr = [];

    for (let node = this.head; node; node = node.next) {
      arr.push(node.data);
    }

    return arr;
  }
}

const arr = [1, 2, 3, 2, 1];
const list = new LinkedList();
arr.forEach(item => list.add(item));
const newArr = list.toArray();

console.log(newArr); // [1,2,3]

结语

以上就是11种JavaScript数组去重的方法,希望对大家有所帮助。当然,在实际开发中,不同的场景可能需要选择不同的方法,大家可以根据自己的业务需求来选择最合适的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js数组去重的11种方法 - Python技术站

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

相关文章

  • 使用JavaScript开发IE浏览器本地插件实例

    使用JavaScript开发IE浏览器本地插件涉及以下步骤: 1. 编写插件代码: 插件需要用 C++ 编写,但可以使用 JavaScript 驱动其行为。首先需要创建一个 ActiveX 控件,然后在控件中嵌入 IE 的 COM 组件。 2. 部署插件代码: 将插件代码打包成 CAB 文件,然后将 CAB 文件嵌入网页中。这样每次访问该网页时,IE 浏览器…

    JavaScript 2023年5月27日
    00
  • JavaScript中的FileReader示例详解

    我很乐意给大家分享一下“JavaScript中的FileReader示例详解”这篇文章的完整攻略。 引言 在Web开发中,常常需要与文件进行交互。例如读取用户上传的文件、将文件保存在客户端等。而JavaScript中的FileReader就为我们处理这些文件提供了便利。本文将详细讲解FileReader的用法及示例。 FileReader简介 FileRea…

    JavaScript 2023年5月19日
    00
  • 原生JS 购物车及购物页面的cookie使用方法

    下面是 “原生JS 购物车及购物页面的cookie使用方法”的完整攻略。 什么是 cookie cookie 是存储在客户端(例如浏览器)中的小数据块,包含有关用户行为和偏好的信息,以及与网站相关的其他信息。网站有时需要使用 cookie 跟踪和存储有关用户的信息。 cookie 如何在购物车和购物页面使用 在购物车和购物页面中使用 cookie 有两种方法…

    JavaScript 2023年6月11日
    00
  • JavaScript中把数字转换为字符串的程序代码

    将数字转换为字符串在 JavaScript 中是一个非常常见的操作。下面是一些示例代码可以帮助你将数字转换为字符串: 方法一: toString() 使用 toString() 方法是最常见的将数字转换为字符串的方法。它的基本语法如下: num.toString([base]); 其中,num 是要转换的数字,base 是可选的参数,表示要使用的进制。如果没…

    JavaScript 2023年5月28日
    00
  • javascript RegExp对象(正则表达式)

    JavaScript中的RegExp对象提供了在字符串中进行正则表达式匹配的能力。它通常用于处理字符串中的模式匹配,如验证、搜索或替换特定模式,是JavaScript中必不可少的一个功能。 RegExp对象的基本概述 创建RegExp对象 使用RegExp对象,最简单的方法是通过一个字符串的值来创建,将其作为参数传递给RegExp的构造函数: var pat…

    JavaScript 2023年6月10日
    00
  • 简短几句 通俗解释javascript的闭包

    下面是详细讲解JavaScript闭包的完整攻略: 什么是闭包? 闭包(closure)是指函数能够访问并使用其自身定义范围之外的变量。 JavaScript 中的每个函数都是一种闭包,将函数作为参数或从函数中返回函数时常会用到闭包的知识。 闭包示例1 例如,下面的代码定义了一个 name 变量,并在函数中创建了一个内部函数,返回的函数能够访问并使用 nam…

    JavaScript 2023年6月10日
    00
  • ASP.NET没有魔法_ASP.NET MVC 模型验证方法

    ASP.NET没有魔法_ASP.NET MVC 模型验证方法 什么是ASP.NET MVC模型验证? ASP.NET MVC模型验证是指在客户端输入数据后提交到服务器时,对数据进行校验的过程。在ASP.NET MVC中,模型验证是至关重要的,因为它可以确保数据的完整性和有效性,避免了潜在的错误。 ASP.NET MVC模型验证的实现方式 ASP.NET MV…

    JavaScript 2023年6月11日
    00
  • Javascript日期对象的dateAdd与dateDiff方法

    让我们来详细讲解“Javascript日期对象的dateAdd与dateDiff方法”的完整攻略。 什么是Javascript日期对象 Javascript内置了Date对象,用来处理日期和时间。Date对象可以表示时间戳,也可以表示当地时间,同时也支持日期格式化和日期计算。 Javascript日期对象的常见方法 getDate(): 获取日期中的天数信息…

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