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对象转原始值

    回答: 1. JavaScript对象转原始值 在JavaScript中,当一个对象被转换成原始类型时,会调用该对象的valueOf()和toString()方法。如果这两个方法都不存在或没有返回原始值,则会抛出TypeError异常。 1.1 valueOf()方法 对于大多数JavaScript对象,valueOf()方法会返回对象本身。但是对于包装对象…

    JavaScript 2023年5月27日
    00
  • JS动态添加iframe的代码

    下面详细讲解一下“JS动态添加iframe的代码”的完整攻略。 什么是iframe? iframe (即内嵌框架) 是 HTML 语言中一种非常强大的标签,可以将一个HTML文档文件嵌入到另一个 HTML 文档中,以达到创建分页面的效果。 如何动态添加iframe 在 JavaScript 中,可以通过以下代码,动态地添加 iframe: var ifram…

    JavaScript 2023年6月11日
    00
  • JavaScript This指向问题详解

    JavaScript This指向问题详解 JavaScript中的this指向是非常重要的一个问题,但也是让很多人感到困惑和烦恼的问题。正确的理解this指向,能够帮助我们更好地编写可读性强、易于维护的JavaScript代码。下面就是关于JavaScript中this指向问题的详解攻略: this的含义 在任何函数中我们都可以使用this关键字。如果我们…

    JavaScript 2023年6月11日
    00
  • js中document.write和document.writeln的区别

    下面是讲解js中document.write和document.writeln的区别的完整攻略: 概述 在 JavaScript 中,document.write() 和 document.writeln() 方法都可以输出字符串到页面中。它们的主要区别在于输输出的字符串位置不同,document.write() 是将字符串输出到指定的输出流(通常是 HTM…

    JavaScript 2023年5月28日
    00
  • JavaScript对象引用与赋值实例详解

    JavaScript对象引用与赋值实例详解 在JavaScript中,有很多时候我们会需要操作对象(Object)。对象是JavaScript中最基本的数据结构之一,而且在JavaScript中,对象是一种引用类型的数据。 这就引出了一个问题,即JavaScript中对象引用和赋值的问题。该问题会在实际的开发中经常遇到,也会给我们带来一些困惑和不好的体验。本…

    JavaScript 2023年5月27日
    00
  • JavaScript中获取时间的函数集

    下面是详细讲解 JavaScript 中获取时间的函数集的完整攻略。 一、获取当前时间的函数 JavaScript 中获取当前时间可以使用 Date 类,通过 new Date() 实例化出一个日期对象,再通过该对象的方法获取当前时间。 //获取当前时间 var date = new Date(); console.log(date) // 输出日期 上述代…

    JavaScript 2023年5月27日
    00
  • JavaScript简单计算人的年龄示例

    下面我会详细讲解如何实现“JavaScript简单计算人的年龄示例”,主要步骤如下: 第一步:获取出生年份 要计算一个人的年龄,首先我们需要获取他的出生年份。在JavaScript中,我们可以通过 prompt()函数获取用户在弹出的对话框中输入的信息。代码如下所示: let birthYear = prompt(‘请输入你的出生年份’); 这里用 let …

    JavaScript 2023年5月28日
    00
  • 用javascript实现改善用户体验之alert提示效果

    下面是用javascript实现改善用户体验之alert提示效果的完整攻略。 一、alert提示框的不足 在很多情况下,我们需要对用户进行提示,告诉他们一些信息。在JavaScript中,最常用的提示方式就是使用alert框。 使用alert提示框的优点是简单易用,可以快速开发。但缺点也是十分明显的,如下: 使用alert框会打断用户的操作,从而降低用户的体…

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