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日

相关文章

  • Redis缓存更新策略详解

    Redis缓存更新策略详解 Redis是一种高性能的内存数据存储系统,常用于缓存数据以提高应用程序的性能。在使用Redis缓存时,我们需要考虑缓存的更新策略,以确保缓存数据的一致性和有效性。本文将详细讲解Redis缓存更新策略,并提供两个示例说明。 1. 缓存更新策略概述 缓存更新策略是指在数据发生变化时如何更新缓存的方法。以下是几种常见的缓存更新策略: 1…

    other 2023年8月2日
    00
  • linux下安装Nginx1.16.0的教程详解

    Linux下安装Nginx 1.16.0的教程详解 本教程将指导您在Linux操作系统上安装Nginx 1.16.0版本。Nginx是一个高性能的Web服务器和反向代理服务器,它可以帮助您快速搭建和管理网站。 步骤1:安装依赖项 在开始安装Nginx之前,您需要确保系统已经安装了以下依赖项: $ sudo apt update $ sudo apt inst…

    other 2023年8月3日
    00
  • [转]3D渲染管线

    [转]3D渲染管线 什么是3D渲染管线 3D渲染管线,简称渲染管线,是指通过计算机将模型、纹理、光照等多种信息转化为最终呈现的图像的过程。在渲染管线中,会经历多个阶段,比如几何处理、光照计算、纹理采样等。 渲染管线的主要阶段及作用 下面简单介绍一下渲染管线的主要阶段及其作用: 1.几何处理 这一阶段主要处理模型的几何属性,包括几何变换、裁剪、光栅化等,最终将…

    其他 2023年3月28日
    00
  • JS继承之借用构造函数继承和组合继承

    JS继承之借用构造函数继承和组合继承 什么是继承? 在面向对象编程中,继承是指从一个类中派生出一个或多个新类的过程。派生类会继承父类的一些属性和方法,同时也可以有自己的一些属性和方法。 在JavaScript中,可以使用各种方式来实现继承,包括原型链继承、构造函数继承、组合继承、Class继承等。 借用构造函数继承 借用构造函数继承是指在子类构造函数中调用父…

    other 2023年6月26日
    00
  • Win10不能关机或重启的四种解决方法(总有一个适合你)

    Win10不能关机或重启的四种解决方法(总有一个适合你) 近期有不少Win10用户反映无法正常关机或重启,可能是因为系统更新等原因导致的,这给用户的正常使用带来不小的困难,下面我们就来介绍一下针对Win10不能关机或重启的四种解决方法,希望对大家有所帮助。 方法一:使用CMD强制关机或重启 1.打开CMD命令终端:WIN+R,在运行框中输入cmd,回车打开2…

    other 2023年6月27日
    00
  • java构造器的重载实现实例讲解

    Java构造器的重载实现实例讲解 构造器(Constructor)是一种特殊的方法,用于创建对象并初始化对象的成员变量。在Java中,构造器的重载是指在同一个类中定义多个构造器,它们具有相同的名称但参数列表不同。通过构造器的重载,我们可以根据不同的需求来创建对象。 构造器的重载实现步骤 要实现构造器的重载,我们需要按照以下步骤进行操作: 在类中定义多个构造器…

    other 2023年8月6日
    00
  • serv-u安全配置完整版

    Serv-U 是一款常用的 FTP 服务器软件,为了保证服务器的安全性,需要进行安全配置。以下为 Serv-U 完整版安全配置攻略。 1. HTTPS 连接 为了保证数据传输的安全,我们可以开启 HTTPS 连接,具体步骤如下: 在 Serv-U 管理界面选择“网站” -> “网站配置”; 在“网站配置”界面中,点击“添加”新建一个网站; 在新建的网站…

    other 2023年6月27日
    00
  • Java实用小技能之快速创建List常用几种方式

    Java实用小技能之快速创建List常用几种方式 在Java中,创建List是非常常见的操作。下面是几种常用的方式来快速创建List: 1. 使用ArrayList的构造函数 List<String> list1 = new ArrayList<>(Arrays.asList(\"item1\", \"i…

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