前言

数组去重,可以说是一个比较常见的面试题,今天来盘点一下都有哪些方法可以实现数组去重。

方法1、双重for循环

这是一个最笨的方法,双重循环。

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法1: 双重for 循环function newArrFn (arr) {// 创建一个新的空数组let newArr = []for(let i = 0;i<arr.length;i++){// 设置一个开关,如果是true,就存进去,不是就不存let  flag = truefor(let j = 0;j<newArr.length;j++){// 原数组和新数组作比较,如果一致,开关变为 falsearr[i] === newArr[j] ? flag = false : flag};flag ? newArr.push(arr[i]) : newArr};return newArr}console.log(newArrFn(arr));

方法2、for循环 +findIndex

主要利用findIndex 的特性,查找元素找不到返回-1, 接下来就需要判断,如果是-1,说明没找到,就往新数组里面添加元素。

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法2: for + indexoffunction newArrFn (arr) {let newArr = []for(let i = 0;i<arr.length;i++){newArr.indexOf(arr[i]) === -1 ? newArr.push(arr[i]) : newArr};return newArr}console.log(newArrFn(arr));

方法3、sort 排序

首先利用 sort 方法进行排序。进行循环,如果原数组的第 i 项和新数组的i - 1 项不一致,就push进去。

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法3: for + sortfunction newArrFn (arr) {arr = arr.sort()let newArr = []for(let i = 0;i<arr.length;i++){arr[i] === arr[i-1] ? newArr : newArr.push(arr[i])};return newArr}console.log(newArrFn(arr));

方法4、Set

ES6中新增了数据类型Set,Set的一个最大的特点就是数据不重复。Set函数可以接受一个数组(或类数组对象)作为参数来初始化,利用该特性也能做到给数组去重。

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法4: setfunction newArrFn (arr) {// .new Set方法,返回是一个类数组,需要结合 ...运算符,转成真实数组return ([...new Set(arr)])}console.log(newArrFn(arr));

方法5、set + Array.from

利用 set数据不重复的特点,结合 Array.from

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法5: set + Array.fromfunction newArrFn (arr) {// .new Set方法,返回是一个类数组,需要结合 Array.from ,转成真实数组return (Array.from(new Set(arr)) )}console.log(newArrFn(arr));

方法6、filter + indexOf

indexOf,可以检测某一个元素在数组中出现的位置,找到返回该元素的下标,没找到返回 -1

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法6 :filter + findIndexfunction newArrFn (arr) {// 利用indexOf检测元素在数组中第一次出现的位置是否和元素现在的位置相等,// 如果相等,说明数组中没有重复的return Array.prototype.filter.call(arr, function (item, index) { return arr.indexOf(item) === index})}console.log(newArrFn(arr));

方法7、includes

利用 includes 检查新数组是否包含原数组的每一项。 如果不包含,就push进去

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法7 :for + includesfunction newArrFn (arr) {// 利用includes 检查新数组是否包含原数组的每一项// 如果不包含,就push进去let newArr = []for(let i = 0;i<arr.length;i++){newArr.includes(arr[i]) ? newArr:  newArr.push(arr[i]) };return newArr}console.log(newArrFn(arr));

方法 8、 for + object

利用对象属性名不能重复这一特点。如果对象中不存在,就可以给 push 进去

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法8 :for + objfunction newArrFn (arr) {// 利用对象属性名不能重复这一特点// 如果对象中不存在,就可以给 push 进去let newArr = []let obj = {}for(let i = 0;i<arr.length;i++){if (!obj[arr[i]]) {newArr.push(arr[i])obj[arr[i]] = 1} else {obj[arr[i]] ++}};return newArr}console.log(newArrFn(arr));

方法9、for + splice

利用 splice 进行切割

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法8 :for + splice// 利用 splice 进行切割。function newArrFn (arr) {for(let i = 0; i<arr.length; i++){for(let j = i + 1; j<arr.length; j++){if (arr[i] === arr[j]) {arr.splice(j,1);j--}};}return arr}console.log(newArrFn(arr));

方法10、filter + indexOf

利用 filter 过滤 配合 indexOf 查找元素

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法10 :filter + indexOf// filter 过滤 配合 indexOf 查找元素function newArrFn (arr) {return arr.filter((item, index) => {return arr.indexOf(item) === index})}console.log(newArrFn(arr));

方法11、Map

利用数据结构存值的特点

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法11 :Mapfunction newArrFn (arr) {let newArr = []let map = new Map()for(let i = 0;i<arr.length;i++){// 如果 map里面不包含,就设置进去if (!map.has(arr[i])) {map.set(arr[i], true)newArr.push(arr[i])}};return newArr}console.log(newArrFn(arr));

方法12:reduce

var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1]// 数组去重:// 方法12 :reducefunction newArrFn (arr) {let newArr = []return  arr.reduce((prev, next,index, arr) => {// 如果包含,就返回原数据,不包含,就把新数据追加进去 return newArr.includes(next) ? newArr :  newArr.push(next)}, 0)}console.log(newArrFn(arr));

超全的数组去重12种方法相关推荐

  1. java数组去重_数组去重12种方案-你要的全在这

    首先我们先温习一下数组的常用的方法 pop push shift unshift slice splice sort reverse concat join indexOf lastIndexOf m ...

  2. JavaScript数组去重6种方法

    数组去重涉及基础知识较多,总结了以下6个方法: 双重for循环,push新数组: 双重for循环,splice原数组: 单个for循环,遍历对象属性: 单个for循环,sort排序后遍历: ES5,i ...

  3. (PASS)JAVA数组去重 三种方法 (不用集合)

    第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01;import java.sql.Array; import ...

  4. js 简单的数组去重13种方法

    js 数组去重 十几种数组去重的方法,有的去重构思可以大致相同. 上篇的几种数组去重 https://blog.csdn.net/weixin_47988564/article/details/106 ...

  5. 史上最全JavaScript数组去重的十种方法(推荐)

    一.前言: 我们在实际工作中,或者在面试找工作时,都会用到或者被问到一个问题,那就是"数组如何去重".是的,这个问题有很多种解决方案,看看下面的十种方式吧! 二.数组去重方式大汇总 ...

  6. 数组去重10种方法(干货)!!!

    1.双重for循环去重 2.利用indexOf(),判断该数值第一次出现的索引下标是不是和本身的索引下标一样,如果不一样就说明有重复 3.利用filter方法 ,如果数据数值第一次出现的索引下标和自身 ...

  7. 遍历数组的12种方法

    第一种:普通for循环 for(var i = 0; i < arr.length;i++ ){//代码} 第二种:forEach循环 arr.forEach((item,index,arr)= ...

  8. JS遍历数组的12种方法

    一. for 普通版 for (let i = 0; i < arr.lengthl; i++) {// ... } 优化版 // 使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大 ...

  9. 整理了js数组去重4种方法

    1.利用es6的iterable数据结构set 原理: ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值.Set 本身是一个构造函数,用来生成 Set 数据结构. ...

最新文章

  1. ncurse界面编程多线程示例
  2. 亚马逊首席科学家李沐「实训营」国内独家直播,马上报名 !
  3. OpenCv 金字塔之上采样与下采样
  4. golang error类型详解
  5. java推送技术_java网络编程 - java服务器推送技术系列方案实战
  6. spring源码分析之spring-web remoting模块概况及基本概念
  7. boost::is_convertible相关的测试程序
  8. 主机字节序与网络字节序
  9. 异步请求引发的Chrome死锁
  10. python---使用get方法访问‘数据库’实体
  11. mips64高精度时钟引起ktime_get时间不准,导致饿狗故障原因分析【转】
  12. Redis 下载与安装(Windows版)
  13. Echarts风向玫瑰图
  14. 图片拼图效果——ps
  15. ttest求pvalue_.net 调用R语言的函数(计算统计值pvalue 对应excel :ttest)
  16. beyond compare如何设置只比较实际内容?(使用关联规则比较)
  17. 视频编辑工具:添加水印、特效、音乐、导出视频、视频转gif
  18. 如何在手机上完成日语翻译中文
  19. vc 实时显示系统时间
  20. APICloud AVM框架开发消防检查助手APP

热门文章

  1. mysql 关注 表设计_mysql - 新浪微博中的关注功能是如何设计表结构的?
  2. Java判断两个集合是否具有交集以及如何获得交集
  3. python横线和竖线_Matplotlib示例.43 横线与竖线
  4. lol3月17日服务器维护,前沿手游:LOL3月17日维护补偿领取地址 3月17日维护延长补偿奖励...
  5. Linux查看文件路径
  6. mediaPlayer播放图片闪
  7. 高通公布骁龙835关键规格:集成首款X16千兆基带
  8. 达飞鹏—光栅精密三维测量模型原理推导(单目结构光)
  9. gdt描述_GDT表与段描述符
  10. 企业网站设计需要考虑用户审美