JavaScript 数组去重详解

JavaScript 数组去重详解

在编写 JavaScript 代码时,经常需要对数组进行去重,以方便后续的操作和处理。本文将详细讲解 JavaScript 数组去重的方法,包括使用 ES6 Set、使用 filter 和 forEach 等方法。

使用 ES6 Set

ES6 中的 Set 是一种新的数据结构,可以用来去重。Set 中存储的值都是唯一的,如果尝试向 Set 中添加相同的值,则不会生效。因此,可以使用 Set 来对数组进行去重操作。

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

上面代码中,首先定义了一个包含重复元素的数组,然后通过扩展运算符和 Set 构造函数实例化一个 Set,再将其转换成数组。

使用 filter 和 forEach

除了使用 Set,还可以使用 filter 和 forEach 方法进行数组去重。其中,filter 方法用于过滤数组中的重复元素,而 forEach 方法用于对去重后的数组进行操作。

let arr = [1, 2, 2, 3, 3, 4, 5];
let uniqueArr = [];
arr.filter(function(item) {
  if (uniqueArr.indexOf(item) === -1) {
    uniqueArr.push(item);
  }
});
uniqueArr.forEach(function(item) {
  console.log(item);
});

上面代码中,首先定义了一个包含重复元素的数组,然后通过 filter 方法对数组进行去重操作,使用 indexOf 判断元素是否已存在于新数组,然后使用 push 添加不存在的元素。接着,使用 forEach 方法遍历去重后的数组,并输出每个元素的值。

示例说明

下面将结合两个示例,详细说明使用以上两种方式进行数组去重的方法。

示例一

let arr = [1, 2, 2, 3, 3, 4, 5];
let uniqueArr1 = [...new Set(arr)];
let uniqueArr2 = [];
arr.filter(function(item) {
  if (uniqueArr2.indexOf(item) === -1) {
    uniqueArr2.push(item);
  }
});
console.log(uniqueArr1); // [1, 2, 3, 4, 5]
console.log(uniqueArr2); // [1, 2, 3, 4, 5]

上面代码中,定义了一个包含重复元素的数组 arr,然后分别使用 ES6 中的 Set 和 filter 和 forEach 完成去重操作,并将结果存储在 uniqueArr1 和 uniqueArr2 变量中。最后,通过 console.log 输出去重后的数组。

示例二

let arr = [
  {id: 1, name: "Amy"},
  {id: 2, name: "Bob"},
  {id: 2, name: "Bob"},
  {id: 3, name: "Cat"},
  {id: 3, name: "Cat"},
  {id: 4, name: "Dave"},
  {id: 5, name: "Eric"}
];
let uniqueArr1 = [];
let uniqueArr2 = [];
arr.filter(function(item) {
  let exist = uniqueArr1.find(function(uItem) {
    return uItem.id === item.id;
  });
  if (!exist) {
    uniqueArr1.push(item);
  }
  if (uniqueArr2.indexOf(item.id) === -1) {
    uniqueArr2.push(item.id);
  }
});
console.log(uniqueArr1);
/*
[
  {id: 1, name: "Amy"},
  {id: 2, name: "Bob"},
  {id: 3, name: "Cat"},
  {id: 4, name: "Dave"},
  {id: 5, name: "Eric"}
]
*/
console.log(uniqueArr2); // [1, 2, 3, 4, 5]

上面代码中,定义了一个包含对象的数组 arr,由于对象无法使用 Set 和 indexOf 进行去重操作,因此采用了不同的方法。首先定义两个空数组 uniqueArr1 和 uniqueArr2,使用 filter 方法对数组进行去重操作,对 uniqueArr1 使用 find 方法取出已存在的对象,如果对象不存在,则将其添加到新数组中;对 uniqueArr2 使用 indexOf 判断元素是否已存在于新数组,然后使用 push 添加不存在的元素。最后,通过 console.log 输出去重后的数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 数组去重详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Geforce GTX 1060怎么样?五款GTX 1060 6GB ITX显卡性能评测

    Geforce GTX 1060怎么样?五款GTX 1060 6GB ITX显卡性能评测 Geforce GTX 1060是一款中高端显卡,适用于游戏和图形处理等应用。以下是对五款GTX 1060 6GB ITX显卡的性能评测攻略。 准备工作 确保计算机满足显卡的最低系统要求,包括电源供应、PCIe插槽等。 下载并安装最新的显卡驱动程序,以确保获得最佳性能和…

    other 2023年10月18日
    00
  • Android 网络请求框架解析之okhttp与okio

    Android 网络请求框架解析之okhttp与okio 简介 在Android开发中,网络请求是一个非常常见的需求。OkHttp是一个强大的开源网络请求框架,它提供了简洁的API和丰富的功能,使得网络请求变得更加容易和高效。OkHttp底层使用了Okio库来处理数据流,提供了高效的IO操作。 OkHttp的基本用法 下面是使用OkHttp发送GET请求的示…

    other 2023年9月6日
    00
  • C语言实现BST二叉排序树的基本操作

    C语言实现BST二叉排序树的基本操作,可以分为创建、插入、删除、查找、遍历等几个步骤。 创建二叉排序树 创建一个二叉排序树的过程,就是创建BSTNode结构体实例的过程。BSTNode结构体定义如下: typedef struct BSTNode { int data; // 数据域 struct BSTNode *left; // 左孩子指针 struct…

    other 2023年6月27日
    00
  • 电脑插耳机没声音怎么办 电脑插了耳机没声音的解决方法

    电脑插耳机没声音怎么办? 如果您插上耳机后没有听到声音,不要惊慌。这是常见的问题,并且通常很容易解决。 步骤1:确保耳机被正确插入 有时,您可能没有正确地将耳机插入电脑的插孔中。您应该尝试重新插入耳机,并确保它被正确地插入插槽中。如果插口装有保护盖,请确保它已完全拔出。 步骤2:检查音量设置 另一个常见的问题是您的音量设置可能已被静音。请尝试按照以下步骤检查…

    other 2023年6月27日
    00
  • Python测试框架pytest核心库pluggy详解

    Python测试框架pytest核心库pluggy详解 简介 pytest是Python语言的一个单元测试框架,提供了丰富的测试选项和灵活易扩展的插件机制。pytest的核心库pluggy提供了一种插件化体系结构,能够让我们轻松地扩展和定制pytest的功能。 pluggy的结构 pluggy的体系结构由两个核心概念组成:hooks和hookspecs。ho…

    other 2023年6月27日
    00
  • 详解c++中的 static 关键字及作用

    详解C++中的static关键字及作用 在C++中,static关键字有多种用途和作用。下面将详细介绍这些用途,并提供两个示例说明。 1. 静态变量 在函数内部使用static关键字声明的变量称为静态变量。静态变量与普通变量的区别在于,静态变量的生命周期延长到整个程序的执行期间,而不是仅在函数调用时存在。 示例1:计算函数调用次数 #include <…

    other 2023年8月20日
    00
  • 解析Arthas协助排查线上skywalking不可用问题

    解析Arthas协助排查线上skywalking不可用问题 问题背景 在解析Arthas协助排查线上skywalking不可用问题之前,首先要了解背景信息。SkyWalking是一个开源的分布式系统跟踪解决方案,用于监视、诊断和分析微服务架构中的性能问题。当线上的SkyWalking不可用时,可能是由于多种原因,比如配置错误、网络连接问题或者应用程序出现故障…

    other 2023年6月28日
    00
  • 苹果iOS11正式版固件下载 苹果iOS11正式版固件下载地址汇总

    苹果iOS11正式版固件下载攻略 苹果iOS11正式版固件是苹果公司发布的最新操作系统版本。本攻略将详细介绍如何下载苹果iOS11正式版固件,并提供下载地址汇总。 步骤一:确认设备兼容性 在下载苹果iOS11正式版固件之前,首先要确认您的设备是否兼容。以下是支持iOS11的设备列表: iPhone:iPhone 5s及以上型号 iPad:iPad Air及以…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部