JavaScript常用数组去重的方法及对比详解

JavaScript常用数组去重的方法及对比详解

在JavaScript开发中,常常需要对数组进行去重操作。本文将详细介绍JavaScript常用的数组去重方法,并对它们进行比较和详细解释。

一、方法1:双重循环去重法

方法描述

通过双重循环遍历数组,把数组中的每个元素依次与之后的每个元素相比较,如果发现重复的元素,则把后面的元素从数组中删除。

示例代码

function unique(arr) {
  for (var i = 0; i < arr.length; i++) {
    for (var j = i + 1; j < arr.length; j++) {
      if (arr[i] === arr[j]) {
        arr.splice(j, 1);
        j--;
      }
    }
  }
  return arr;
}

// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]

方法分析

该方法实现简单,但由于涉及到双重循环,时间复杂度较高,不适用于大型数组。

二、方法2:利用indexOf去重法

方法描述

通过indexOf函数检查每个值是否已经在新数组中出现过,如果没有出现过,则将其加入新数组中。

示例代码

function unique(arr) {
  var newArr = [];
  for (var i = 0; i < arr.length; i++) {
    if (newArr.indexOf(arr[i]) === -1) {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}

// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]

方法分析

该方法是一种较为简单的去重方法,并且时间复杂度比双重循环去重法低,但在处理大型数组时,indexOf函数的性能问题会显现出来。

三、方法3:利用ES6 Set去重法

方法描述

利用ES6中的Set数据结构中的元素唯一性,将数组转换为Set,再将Set转换为数组。

示例代码

function unique(arr) {
  return Array.from(new Set(arr));
}

// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]

方法分析

该方法使用了ES6语法,代码简单易懂,并且时间复杂度较低,是一种比较常用的数组去重方法。

四、方法4:利用Object对象属性去重法

方法描述

通过建立一个新的Object对象,遍历原数组中的每个元素作为对象属性名并赋值为1,当再次出现该属性名时,将其删除。

示例代码

function unique(arr) {
  var obj = {};
  return arr.filter(function(item, index, arr) {
    return obj.hasOwnProperty(typeof item + item)
      ? false
      : (obj[typeof item + item] = true);
  });
}

// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]

方法分析

该方法利用了对象属性名不重复的特性,时间复杂度较低,但是当原数组中的元素是对象时,该方法就不适用了。

五、方法5:利用哈希表去重法

方法描述

建立一个新的哈希表,遍历原数组中的每个元素,在哈希表中寻找该元素,如果找到,则说明该元素重复,将其删除。如果未找到,则说明该元素不重复,将其加入哈希表中。

示例代码

function unique(arr) {
  var hashMap = {},
    newArr = [];
  for (var i = 0; i < arr.length; i++) {
    if (!hashMap[typeof arr[i] + arr[i]]) {
      hashMap[typeof arr[i] + arr[i]] = true;
      newArr.push(arr[i]);
    }
  }
  return newArr;
}

// 测试代码
var arr = [1, 2, 3, 3, 4, 5, 5, 6];
var result = unique(arr);
console.log(result); // [1, 2, 3, 4, 5, 6]

方法分析

该方法实现简单,时间复杂度较低,是一种常用的数组去重方法。

结语

本文介绍了JavaScript常用的5种数组去重方法,其中对比了它们的优缺点。在实际开发中,我们可以根据具体情况选择不同的方法来完成操作。

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

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

相关文章

  • 防止重复发送 Ajax 请求

    防止重复发送 Ajax 请求是一个常见的开发任务,因为在页面交互过程中,用户可能会频繁地发起相同的请求,如果每次都向服务器发起请求,不仅会增加服务器的压力,也会降低用户体验。下面是防止重复发送 Ajax 请求的完整攻略: 1. 使用防抖技术 防抖技术是一种延迟执行函数的策略,即在指定时间内如果触发多次事件,只会执行一次。在 Ajax 请求中,我们可以使用防抖…

    JavaScript 2023年6月11日
    00
  • 原生js实现ajax方法(超简单)

    下面是“原生js实现ajax方法(超简单)”的完整攻略。 步骤1:创建XMLHttpRequest对象 在JavaScript中要使用Ajax发送HTTP请求,必须先创建一个XMLHttpRequest对象。该对象提供了向Web服务器发送请求和接收响应的方法。 创建XMLHttpRequest对象: let xmlhttp; if (window.XMLHt…

    JavaScript 2023年5月27日
    00
  • JavaScript reduce的基本用法详解

    JavaScript reduce的基本用法详解 reduce() 方法通过指定函数对数组元素进行累积计算,可将数组简化为单个值。它接收一个回调函数作为参数,该回调函数需要返回一个累积的结果。 基本语法 array.reduce(function(total, currentValue, currentIndex, arr), initialValue) 参…

    JavaScript 2023年5月18日
    00
  • 如何利用PHP 快速解决跨域问题

    下面是如何利用PHP快速解决跨域问题的完整攻略: 什么是跨域问题 首先,我们需要了解一下什么是跨域问题。当客户端使用js等脚本语言向另一个域名或IP地址发起请求时,如果目标域名与客户端当前域名不同,就会遇到跨域问题。出于安全的考虑,浏览器限制了这种跨域请求,导致请求失败。 解决跨域问题的方法 解决跨域问题的方法有很多,其中比较常用的有jsonp、cors和p…

    JavaScript 2023年6月11日
    00
  • ajax响应json字符串和json数组的实例(详解)

    下面是“ajax响应json字符串和json数组的实例(详解)”的攻略: 1. 理解何为JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。JSON 是 JavaScript 对象的字符串表示,因此它得名为 JSON。 在 JSON 格式中,数据以名称/值对的形式进行存…

    JavaScript 2023年5月27日
    00
  • Javascript学习笔记一 之 数据类型

    下面是关于“Javascript学习笔记一 之 数据类型”的完整攻略。 Javascript学习笔记一 之 数据类型 基本数据类型 Javascript有以下六种基本数据类型: Number(数字):整数或小数,例如:123 或 3.14。 String(字符串):由单引号或双引号包裹起来的一系列字符,例如:’Hello World’。 Boolean(布尔…

    JavaScript 2023年5月18日
    00
  • JS求Number类型数组中最大元素方法

    下面是“JS求Number类型数组中最大元素方法”的完整攻略: 方法一:使用Math.max()函数 我们可以直接使用JavaScript内置的Math.max()函数来求一个数组中的最大元素。但要注意的是,Math.max()函数无法直接传入一个数组,需要借助apply()函数将数组作为参数传入Math.max()。 代码如下: const arr = […

    JavaScript 2023年6月10日
    00
  • 一分钟学会JavaScript中的try-catch

    下面是一分钟学会JavaScript中的try-catch的完整攻略。 什么是try-catch try-catch 是 JavaScript 中用来处理异常的一种语句结构。当在 try 块中发生了异常时,该块中代码的执行就会停止,并且 JavaScript 引擎会抛出一个 Exception(异常)。这时就需要在代码中使用 catch 块来捕获这个异常并处…

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