JS实现数组去重方法总结(六种方法)

这里是JS实现数组去重方法总结(六种方法)的完整攻略。

一、方法一:利用ES6 Set特性去重

利用ES6新特性Set(集合)的特性,可以很方便地去重。

实现方法如下:

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

使用Set的优点是代码简洁,不需要自己写去重方法,但是会改变原数组顺序。

二、方法二:利用ES6 Map特性去重

利用ES6新特性Map的特性,可以很方便地去重。

实现方法如下:

let arr = [1, 2, 3, 4, 1];

function unique(arr) {
  const map = new Map();
  return arr.filter(item => !map.has(item) && map.set(item, 1));
}
console.log(unique(arr)); // [1, 2, 3, 4]

使用Map的优点是可以保持原数组的顺序。

三、方法三:使用for循环去重

利用for循环逐一遍历数组,将不重复的元素放入新数组中。

实现方法如下:

let arr = [1, 2, 3, 4, 1];
let 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, 4]

此方法是常规的去重方法,使用for循环对数组逐个遍历,不建议用于大型数组去重,因为这样操作效率相对较低。

四、方法四:使用reduce去重

将数组中的每个元素逐个遍历,判断该元素是否在新数组中存在。若不存在,则在新数组中添加该元素。

实现方法如下:

let arr = [1, 2, 3, 4, 1];
let newArr = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
console.log(newArr); // [1, 2, 3, 4]

使用reduce可以充分利用数组本身的方法进行去重操作,代码简洁便于管理,适用于大型数组。

五、方法五:利用filter方法和indexOf方法去重

使用filter方法对每个元素进行遍历,返回新数组中不存在的元素。

实现方法如下:

let arr = [1, 2, 3, 4, 1];
let newArr = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(newArr); // [1, 2, 3, 4]

使用filter方法和indexOf方法的优点是代码简洁,但是对于大型数组操作效率相对较低。

六、方法六:利用对象属性去重

使用对象属性的方式可以将数组中的元素作为对象的属性,去重后返回对象的键名所组成的新数组。

实现方法如下:

let arr = [1, 2, 3, 4, 1];
let obj = {};
let newArr = [];
for (let i = 0; i < arr.length; i++) {
  if (!obj[arr[i]]) {
    newArr.push(arr[i]);
    obj[arr[i]] = 1;
  }
}
console.log(newArr); // [1, 2, 3, 4]

使用对象属性的优点是操作效率高,但是返回的是新数组而非原数组。

以上六种方法各有特点,根据实际应用场景选择适合的方法可以大幅提高代码效率和可读性。

示例:

// 对数组去重操作并输出去重后的值
let arr = [1, 3, 2, 1, 2, 3];
let newArr = [];
for (let i = 0; i < arr.length; i++) {
  if (newArr.indexOf(arr[i]) === -1) {
    newArr.push(arr[i]);
  }
}
console.log(newArr); // [1, 3, 2]

另一个示例:

// 操作方法:使用对象属性去重
let arr = [1, 3, 2, 1, 2, 3];
let obj = {};
let newArr = [];
for (let i = 0; i < arr.length; i++) {
  if (!obj[arr[i]]) {
    newArr.push(arr[i]);
    obj[arr[i]] = 1;
  }
}
console.log(newArr); // [1, 3, 2]

以上示例中,第一个示例使用for循环遍历并去重数组,第二个示例使用对象属性去重。两个示例分别说明了使用两种不同的方法实现对数组去重,但都能较好地达到去重目的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现数组去重方法总结(六种方法) - Python技术站

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

相关文章

  • Vue实现路由跳转和嵌套

    下面我将详细讲解如何使用Vue实现路由跳转和嵌套。 使用Vue实现路由跳转和嵌套 Vue作为一款主流的前端框架,提供了非常方便的路由管理方式。我们可以通过Vue Router插件来实现路由相关的操作,包括路由跳转和嵌套等。 安装Vue Router插件 首先,我们需要安装Vue Router插件。可以通过Vue CLI工具来创建一个项目,并在项目中安装Vue…

    JavaScript 2023年6月11日
    00
  • js注入 黑客之路必备!

    JS注入是Web安全领域中非常重要的一个议题,也是Web攻击中常用的一种手段。攻击者可以通过JS注入攻击网站或用户,包括窃取用户信息、篡改网页内容、控制用户会话等。 以下是一个简单的JS注入攻击示例: 攻击目标 我们以一个简单的登录页面(login.html)为目标页面,该页面通过使用jQuery库将用户名和密码传递给后台验证,并在验证失败时显示错误提示。页…

    JavaScript 2023年5月19日
    00
  • JavaScript函数内部属性和函数方法实例详解

    JavaScript函数内部属性和函数方法实例详解 在JavaScript中,每个函数都是一个对象,都有一些内部属性(internal properties)以及一些方法(method)。 函数对象的内部属性 [[Call]]属性 每个函数对象都有一个 [[Call]] 属性,也就是函数的调用方法。当我们像这样调用函数时: myFunction(); 实际上…

    JavaScript 2023年5月27日
    00
  • AngularJs Using $location详解及示例代码

    AngularJS是一个流行的JavaScript框架,可以帮助开发人员构建单页面Web应用程序和后端Web应用程序。AngularJS的核心是模型视图控制器(MVC)和模型视图视图模型(MVVM)。 在AngularJS中,$location服务提供了路由服务,可以轻松处理页面的路由。$location服务用于处理浏览器中的URL,并允许您在JavaScr…

    JavaScript 2023年6月11日
    00
  • JS弹出窗口代码大全(详细整理)

    针对JS弹出窗口代码大全(详细整理)这篇攻略,我来详细讲解一下。 1. 标题分析 在这篇攻略中,首先我们可以看到一个一级标题——JS弹出窗口代码大全(详细整理)。根据标题中的关键词,我们可以猜测到这篇攻略将会介绍一些JS弹出窗口的实现代码,并且可能是一个包含多篇文章的系列攻略。 2. 掌握目录结构 接下来,我们可以看到一个二级标题——目录。在这个二级标题下,…

    JavaScript 2023年5月27日
    00
  • javascript整除实现代码

    Javascript整除实现代码攻略 在Javascript中,没有提供类似于Java或C++等语言中的整除运算符,因此我们需要在代码中自己实现这一功能。下面详细介绍Javascript整除实现的几种方法。 方法一:使用Bitwise操作符 可以使用Bitwise操作符来实现整除,具体思路是先进行整数运算,然后通过Bitwise运算符强制取整,从而达到整除的…

    JavaScript 2023年5月18日
    00
  • Javascript 中创建自定义对象的方法汇总

    让我们来详细讲解一下 “Javascript 中创建自定义对象的方法汇总”。 一、引言 自定义对象是 JavaScript 中最重要的一个概念之一。JavaScript 中有多种创建自定义对象的方法,这些方法都可以用来创建具有特定属性和行为的对象。在本文中,我们将讨论以下方法: 工厂模式 构造函数模式 原型模式 组合模式 原型式继承 寄生式继承 组合继承 二…

    JavaScript 2023年5月27日
    00
  • Extjs表单输入框异步校验的插件实现方法

    下面是详细讲解“Extjs表单输入框异步校验的插件实现方法”的完整攻略。 什么是Extjs表单输入框异步校验的插件? 在使用Extjs框架编写表单时,常常需要对表单中的输入框进行校验,以保证用户输入的内容符合要求。而有些校验规则需要通过异步方式进行,比如从后台获取数据判断输入是否合法。这时就需要用到Extjs表单输入框异步校验的插件。 实现方法 具体实现方法…

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