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

yizhihongxing

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日

相关文章

  • JavaScript脚本语言在网页中的简单应用

    JavaScript脚本语言在网页中的简单应用攻略 简介 JavaScript是一种脚本语言,广泛应用于网页中。它可以动态地修改DOM结构、实现动画效果、验证数据、发送网络请求等等。在网页设计和开发中,JavaScript是必不可少的一部分。 在网页中添加JavaScript脚本 网页中会引用JavaScript脚本文件,以及内联JavaScript脚本。引…

    JavaScript 2023年5月18日
    00
  • JS实现1000以内被3或5整除的数字之和

    实现1000以内被3或5整除的数字之和可以通过JavaScript的for循环语句、if条件语句以及数组等语法实现。下面是具体的实现步骤: 确定要使用的语法 由于要实现条件判断和循环操作,因此我们可以使用JavaScript的if条件语句和for循环语句。此外,我们还需要使用数组来存储符合条件的数字。 确定实现思路 首先,我们需要遍历1到1000之间的所有数…

    JavaScript 2023年5月28日
    00
  • 掌握AJAX第2/7页

    掌握AJAX第2/7页的完整攻略 简介 AJAX(异步的JavaScript和XML)是一种用于创建动态网页的技术。它的主要优点是不用重新加载整个页面就可以与服务器进行交互。这种技术使得Web应用程序更快速、更灵活,并增强了用户体验。在本攻略中,我们将着重介绍AJAX的相关概念和使用方法。 了解AJAX AJAX是一种用于创建动态网页的重要技术。它的主要原理…

    JavaScript 2023年6月1日
    00
  • js将列表组装成树结构的两种实现方式分享

    让我们来详细讲解“js将列表组装成树结构的两种实现方式分享”的完整攻略。 1. 背景 在开发网站时,经常会遇到需要将列表数据组装成树形结构的需求。比如,某个商品分类下有多个子分类,子分类又有自己的子分类,这就是一棵树形结构。如果我们只有一份列表数据,该如何将它组装成一棵树呢? 2. 实现方式一:递归 2.1 实现思路 递归是一种非常自然且直观的方法,它通过不…

    JavaScript 2023年5月27日
    00
  • js 通过Object.defineProperty() 定义和控制对象属性

    JavaScript的Object.defineProperty()方法可以用来定义和控制对象属性的访问方式。它可以让我们在对象上定义新属性,或修改已有属性的getter和setter方法。本文将全面介绍Object.defineProperty()的使用方法及其示例。 基本用法 Object.defineProperty()方法接受三个参数:要定义属性的对…

    JavaScript 2023年5月27日
    00
  • axios拦截器、ElementUI组件的使用方法

    axios拦截器使用方法 1. 安装Axios Axios是一个基于Promise的HTTP库,可以在浏览器和Node.js中使用。安装Axios,请在命令行输入以下命令: npm install axios 2. 添加拦截器 可以使用Axios的拦截器来在请求或响应被处理前拦截它们。 以下是一个示例,向请求头中添加Authorization: import…

    JavaScript 2023年6月10日
    00
  • IE10 Error.stack 让脚本调试更加方便快捷

    当在IE10及以后的版本中,使用JavaScript编写脚本时,我们可以使用Error对象让脚本调试更加方便快捷。 简介 使用Error.stack可以帮助我们获取当前脚本执行时的调用栈信息。调用栈信息包含了当前执行脚本的具体位置和它的父级调用栈信息。将这些信息打印出来,可以更加方便地跟踪代码运行过程中的错误信息,定位代码中的问题。 代码示例 下面是一个在代…

    JavaScript 2023年6月11日
    00
  • vue-i18n结合Element-ui的配置方法

    下面我将详细介绍 Vue-i18n 结合 Element-ui 的配置方法。 安装和配置 Vue-i18n 第一步是安装 Vue-i18n,使用以下命令: npm install vue-i18n –save-dev 完成安装后,我们需要在 Vue 项目中添加一个名为 i18n.js 的文件来配置 i18n。该文件的代码如下: import Vue fro…

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