JS实现数组去重的11种方法总结

JS实现数组去重的11种方法总结

在JavaScript中,数组去重是经常会遇到的问题。本篇文章总结了11种常用的数组去重方法,包括传统的for循环遍历、使用ES6 Set、使用对象属性、使用Array.filter()高阶函数等方法。下面将逐一介绍这些方法。

1. 使用for循环遍历

这是最简单的一种方法,也是最经典的一种方法。遍历数组中的每个元素,将其与数组中前面的每个元素进行比较,如果已经出现过,则删除当前元素。具体实现如下:

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);
      }
    }
  }
  return arr;
}

示例说明:

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

2. 使用ES6 Set

ES6中的Set是一种值的集合,其中不允许出现重复的元素。可以借助这一特性来实现数组去重。将数组转换为Set,并再次转换回数组即可。具体实现如下:

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

示例说明:

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

3. 使用对象属性

创建一个空对象,遍历数组中的每个元素,判断该对象是否已经存在当前元素的属性,如果不存在则新增该属性。最后再将对象转换为数组即可。具体实现如下:

function unique(arr) {
  const obj = {};
  arr.forEach(item => {
    obj[item] = true;
  })
  return Object.keys(obj);
}

示例说明:

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

4. 使用Array.indexOf()

这是一个比较老的方法,利用Array.indexOf()方法判断当前元素是否在数组中出现过,如果出现过则不再将当前元素加入新数组。具体实现如下:

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

示例说明:

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

5. 使用Array.includes()

使用Array.includes()方法来判断当前元素是否在数组中出现过,如果出现过则不再将当前元素加入新数组。具体实现如下:

function unique(arr) {
  let res = [];
  for(let i = 0; i < arr.length; i++) {
    if(!res.includes(arr[i])) {
      res.push(arr[i])
    }
  }
  return res;
}

示例说明:

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

6. 使用Array.filter()

使用Array.filter()方法来过滤出数组中不重复的元素即可。具体实现如下:

function unique(arr) {
  return arr.filter((item, index) => {
    return arr.indexOf(item) === index
  })
}

示例说明:

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

7. 使用Array.reduce()

使用Array.reduce()方法遍历数组,将每个元素添加到新数组中,如果已经出现过,则不添加。具体实现如下:

function unique(arr) {
  return arr.reduce((pre, cur) => {
    if(!pre.includes(cur)) {
      pre.push(cur)
    }
    return pre;
  }, [])
}

示例说明:

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

8. 使用Map

利用Map数据结构的键是唯一的特性来进行去重。具体实现如下:

function unique(arr) {
  let map = new Map();
  let res = [];
  for(let i = 0; i < arr.length; i++) {
    if(!map.has(arr[i])) {
      map.set(arr[i], true);
      res.push(arr[i])
    }
  }
  return res;
}

示例说明:

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

9. 使用Object.keys()和Object.values()

先使用Object.values()方法获取数组中的不重复的元素,再使用Object.keys()方法将其转换为数组即可。具体实现如下:

function unique(arr) {
  return Object.keys(Object.fromEntries(new Map(arr.map(item => [item, true]))))
}

示例说明:

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

10. 使用ES6的Map和数组解构

使用ES6的Map数据结构,以及数组解构赋值的方法进行去重。具体实现如下:

function unique(arr) {
  const map = new Map();
  arr.forEach(item => {
    map.set(item, true);
  })
  return [...map.keys()];
}

示例说明:

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

11. 使用ES6的Array.from()和Set

使用ES6的Array.from()和Set方法进行去重即可。具体实现如下:

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

示例说明:

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

总结:

通过本篇文章的介绍,可以看到我们可以使用各种方法进行数组去重,这里提供了11种常用的方法,选择哪一种方法要根据实际情况而定,比如数组大小、元素类型、浏览器兼容性等因素都需要考虑。

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

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

相关文章

  • JS判断字符串包含的方法

    JS中判断字符串是否包含指定字符或字符串的方法有多种。下面我将为你详细讲解常见的几种方法,包括 includes()、indexOf()、search()、match()、正则表达式。同时,你可以参考下面的示例,更好地理解这些方法。 includes() includes()是ES6提供的新增方法。该方法用于判断一个字符串中是否包含指定字符或字符串,并返回B…

    JavaScript 2023年5月28日
    00
  • ajax获取json数据为undefined原因分析

    当我们使用AJAX获取JSON数据时,有时会发现返回的数据无法解析,而返回的结果为undefined。这种情况通常是由于以下原因引起的: 数据格式不正确:JSON 格式要求数据必须为名/值对构成的无序集合。如果返回的数据格式不正确,就无法解析成JSON对象。 跨域请求:由于浏览器的同源策略限制,如果 AJAX 请求的数据源与当前域不一致,则会遇到跨域问题。这…

    JavaScript 2023年6月11日
    00
  • JavaScript代码实现简单日历效果

    JavaScript代码实现简单日历效果 引言 日历是人们生活中必不可少的一部分,Javascript通过操作DOM元素以及CSS样式,实现了多种简单的日历效果。本文将详细介绍JavaScript如何实现一个简单的日历效果。 分析与目标 首先,我们要对一个日历的样式进行分析,发现日历主要是由星期和日期构成的,其次各个日期的显示状态需通过计算天数来完成。 所以…

    JavaScript 2023年5月27日
    00
  • Js+Dhtml:WEB程序员简易开发工具包(预先体验版)

    “Js+Dhtml:WEB程序员简易开发工具包(预先体验版)”使用攻略 1. 概述 “Js+Dhtml:WEB程序员简易开发工具包(预先体验版)”是一款方便程序员快速开发WEB项目的工具包。该工具包包含多个实用的功能,如表单验证、AJAX请求等。通过简单的配置和使用,可以大大提高WEB开发效率。 2. 安装和配置 该工具包使用的是js和dhtml技术,因此只…

    JavaScript 2023年5月27日
    00
  • JavaScript中检测数据类型的四种方法

    当我们在进行 JavaScript 的开发时,必须经常检测数据类型以确保代码的正确性。本文将介绍 JavaScript 中检测数据类型的四种方法。 方法一:typeof 操作符 typeof 操作符用于检测变量的数据类型,返回一个字符串,表明该变量的数据类型。 console.log(typeof ‘Hello World’); // string cons…

    JavaScript 2023年6月10日
    00
  • JavaScript初学者应注意的七个细节小结

    JavaScript初学者应注意的七个细节小结 1. 关于变量 使用关键字var声明变量。没有使用var关键字声明的变量将会自动声明为全局变量,可能会影响其他页面的JavaScript代码。 声明变量时要加上适当的注释,方便自己和其他人阅读代码。 变量名应该简洁明了,便于理解,不要使用拼音或者将多个单词缩写在一起的方式命名变量。 示例: // 不好的示例 v…

    JavaScript 2023年6月10日
    00
  • JS操作JSON要领详细总结

    JS操作JSON要领详细总结 什么是JSON JSON是一种轻量级的数据交换格式,是JavaScript的一种子集。JSON格式具有很好的兼容性和可读性,广泛应用于前端与后端之间的数据传递及存储。 JSON语法规则 JSON数据由键值对组成,键和值使用冒号分隔,每个键值对之间使用逗号分隔,最外层需用花括号{}包裹。 { "name": &…

    JavaScript 2023年5月27日
    00
  • js实现touch移动触屏滑动事件

    首先,在JS中实现touch移动事件需要以下步骤: 1.监听touch事件,获取移动的距离及方向2.根据移动的距离及方向判断滑动操作:是垂直滑动还是水平滑动3.根据滑动的距离改变页面元素的位置4.结束滑动后执行相应的操作,比如改变元素的样式或者执行相关动画 下面是JS实现touch移动事件的完整示例: <!DOCTYPE html> <ht…

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