js 数组去重的四种实用方法

下面是“js 数组去重的四种实用方法”的完整攻略:

一、使用 Set 数据结构

ES6 中提供了 Set 数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。我们可以利用 Set 数据结构去重。

示例代码如下:

let arr = [1, 2, 3, 2, 1];
let set = new Set(arr);  //set {1, 2, 3}
let newArr = Array.from(set);    // [1, 2, 3]

通过 Set 的构造函数,我们将 arr 转换为 set,然后通过 Array.from 方法将 set 转换为数组,得到的 newArr 就是去重后的数组。

二、利用 indexOf 判断元素是否存在

对于一个值已知的数组,我们可以利用 indexOf 方法判断该元素是否已经存在于新的数组中,如果不存在则将其添加进去。

示例代码如下:

function uniq(array){
    let temp = [];
    for(let i = 0; i < array.length; i++){
        if(temp.indexOf(array[i]) === -1){
            temp.push(array[i]);
        }
    }
    return temp;
}

let arr = [1, 2, 3, 2, 1];
console.log(uniq(arr));  // [1, 2, 3]

我们定义了一个 uniq 函数,利用 for 循环遍历原数组,然后通过 indexOf 方法判断该元素是否已经存在于新数组 temp 中,不存在就将其添加到 temp 中,最后返回 temp。

三、利用 filter 方法

我们可以利用 filter 方法遍历原数组,返回符合指定条件的元素组成的新数组。

示例代码如下:

function uniq(array){
    let newArray = array.filter((element, index, self) => {
        return self.indexOf(element) === index;
    });
    return newArray;
}

let arr = [1, 2, 3, 2, 1];
console.log(uniq(arr));  // [1, 2, 3]

我们定义了一个 uniq 函数,利用 filter 方法遍历原数组,返回符合指定条件的元素组成的新数组,其中指定的条件是元素在原数组中的位置等于其在新数组中的位置。

四、利用 Map 数据结构

我们还可以利用 Map 数据结构来进行数组去重。与 Set 类似,Map 也可以用来过滤重复的数组元素。

示例代码如下:

function uniq(array){
    let map = new Map();
    let newArray = [];
    for(let i = 0; i < array.length; i++){
        if(map.has(array[i])){
            map.set(array[i], true);    
        } else {
            map.set(array[i], false);   
            newArray.push(array[i]);
        }
    }
    return newArray;
}

let arr = [1, 2, 3, 2, 1];
console.log(uniq(arr));  // [1, 2, 3]

我们定义了一个 uniq 函数,利用 for 循环遍历数组,利用 Map 判断该元素是否已经存在于新数组中,如果已经存在,则将该元素的 key 值设为 true,否则将该元素的 key 值设为 false,并将该元素添加到新数组中。最后返回新数组。

以上就是“js 数组去重的四种实用方法”的完整攻略,希望能对你有所帮助!

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

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

相关文章

  • Swift协议Protocol介绍

    Swift协议Protocol介绍 协议(Protocol)是Swift语言中对类、结构体、枚举等类型进行规范和限制的一种机制,类似于其他编程语言中的接口(Interface)概念。协议描述了一系列要求,定义了类型所应实现的方法、属性和其他成分。当某个类型满足了协议要求,我们就说该类型“遵循了”或者“实现了”该协议。 基本语法 定义一个协议,使用protoc…

    other 2023年6月27日
    00
  • 安装office 2010后桌面右键出现共享文件夹同步怎么去掉?

    要去掉桌面右键菜单中的共享文件夹同步选项,可以按照以下步骤进行操作: 打开注册表编辑器。按“Win + R”打开运行窗口,输入“regedit”后回车即可。 找到以下路径:“HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers”。 在这个路径下,可以看到多个子项,其中“Shari…

    other 2023年6月27日
    00
  • 最全面的Android Studio使用教程(图文)

    很抱歉,作为一个文本模型,我无法提供完整的图文教程。然而,我可以为您提供一些关于Android Studio使用的基本指导和示例说明。请注意,以下内容是以纯文本形式提供的,没有图像或图文。 Android Studio使用教程 1. 安装Android Studio 首先,您需要下载并安装Android Studio。您可以从官方网站上下载适用于您的操作系统…

    other 2023年7月27日
    00
  • python实现跨文件全局变量的方法

    Python实现跨文件全局变量的方法 在Python中,要实现跨文件的全局变量,可以使用以下方法: 方法一:使用模块 创建一个专门用于存放全局变量的模块,例如globals.py。 在globals.py中定义全局变量,例如: # globals.py global_var = 10 在其他文件中,通过导入globals.py模块来使用全局变量,例如: # …

    other 2023年7月29日
    00
  • ftp自动同步软件 推荐五款ftp自动同步软件

    FTP自动同步软件推荐 FTP自动同步软件是一种可以自动同步FTP服务器和本地文件夹的工具,可以帮助用户快速、方便地备份和同步文件。以下是五款优秀的FTP自动同步软件: FileZilla FileZilla是一款免费的FTP客户端软件,支持FTP、SFTP和FTP over TLS等协议。它提供了一个简单易用的界面,可以方便地进行文件传输和同步。FileZ…

    other 2023年5月9日
    00
  • 如何批量删除Excel2007中的文本和控件对象

    批量删除Excel2007中的文本和控件对象,可以通过以下步骤完成: 步骤一:进入编辑模式 首先,打开Excel 2007文档并进入编辑模式。可以通过双击文档中需要编辑的单元格或右键单击该单元格并选择“编辑”选项进入编辑模式。 步骤二:选择需要删除的文本和控件对象 在编辑模式下,选择需要删除的文本和控件对象。可以通过按住鼠标左键并拖动来选择一个区域的文本或控…

    other 2023年6月26日
    00
  • Spring中xml配置文件的基础使用方式详解

    下面就来详细讲解Spring框架中xml配置文件的基础使用方式。 一、Spring中xml配置文件的作用 Spring框架采用xml配置文件的方式,可以定义bean(Java对象)以及它们之间的关系,通过配置的方式告诉Spring容器应该实例化哪些bean,以及它们之间如何协作。因此,xml配置文件扮演着Spring应用程序的重要角色。 二、Spring中x…

    other 2023年6月25日
    00
  • Go语言中的方法、接口和嵌入类型详解

    Go语言中的方法、接口和嵌入类型详解 方法 Go语言中,方法是一种作用于特定类型变量的函数。它类似于C++或者Java中的方法。在一个类型中定义方法给了这个类型的对象被调用这个方法的可能。在Golang中,方法的语法格式如下: func (receiver type) methodName(parameters) (results) { // 方法体 } 其…

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