JavaScript中数组去重的5种方法


Posted in Javascript onJuly 04, 2020

正常情况下,数据去重的工作一般都是由后端同事来完成的,但是前端也要掌握好处理数据的能力,万一去重的工作交给我们大前端处理,我们也不能怂呀。现在我总结了一些去重的方法,希望对大家有点帮助。

方法一:new Set()实现数组去重

ES6 提供了新的数据结构 Set,它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set 本身是一个构造函数,用来生成 Set 数据结构。Set函数可以接受一个数组,用于初始化。根据 Set的数据特性,我们可以实现数组去重。

let list = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
let list1 = Array.from(new Set(list)); // [ 1, "a", true, false, null, "", undefined ]
let list2 = [...new Set(list)]; // [ 1, "a", true, false, null, "", undefined ]

方法二:some()+循环去重

some() 方法用于检测数组中的元素是否满足指定条件(函数提供) 。 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。 如果没有满足条件的元素,则返回false。 我们可以定义一个新数组来承接没有重复的数据,遍历原始数组的时候,用新数组来判断数据是否已经出现过。

function distinct(list) {
   let result = [list[0]];// 用于承接没有重复的数据,初始时将原始数组的第一个值赋给它。
   for (let i = 1; i < list.length; i++) {
     // 判断结果数组中是否存在一样的值,若果没有的话则将数据存入结果数组中。
     if (!(result.some(val => list[i] === val))) {
       result.push(list[i]);
     }
   }
   return result;
 }
let arr = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
distinct(arr); // [ 1, "a", true, false, null, "", undefined ]

方法三:双重for循环去重

双重for循环,第一层循环确保数组中的每一项都能被比较,第二层循环确保被比较项后的每一项都能跟被比较项比较。

function distinct2(list) {
  for (let i = 0; i < list.length; i++) {
    for (let j = i + 1; j < list.length; j++) {
      // 后面数据的若跟前一项数据相同,则重复,需要去除。
      if (list[i] === list[j]) {
        list.splice(j, 1); // 去除后面的相同项
        j--;
      }
    }
  }
  return list;
}
let arr = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
distinct2(arr); // [ 1, "a", true, false, null, "", undefined ]

方法四:hasOwnProperty()方法去重

hasOwnProperty() 方法用来检测一个属性是否是对象的自有属性,而不是从原型链继承的。如果该属性是自有属性,那么返回 true,否则返回 false。

function unique(arr) {
 var obj = {}; // 用来记录数组中的数据
 return arr.filter(function(item, index, arr){
   // 如果记录对象中存在某个数据,则返回false过滤掉;否则obj进行记录并筛选出来
   return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
 })
}
let arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
unique(arr) // [ 1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, 'a', {}]

方法五:利用filter()+indexOf()方法去重

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

function unique(arr) {
 return arr.filter(function(item, index, arr) {
  // 从数组0位开始查,如果当前元素在原始数组中的第一个索引==当前索引值,说明它是第一次出现。
  return arr.indexOf(item, 0) === index;
 });
}
let list = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
unique(list); // [ 1, "a", true, false, null, "", undefined ]

此外,数组去重还可以利用filter()、includes()等方法实现,但是思路都跟上面几种方法类似,这里就不一一列举了。

以上就是JavaScript中数组去重的5种方法的详细内容,更多关于JavaScript中数组去重的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JavaScript Archive Network 集合
May 12 Javascript
JavaScript 实现类的多种方法实例
May 01 Javascript
Ajax同步与异步传输的示例代码
Nov 21 Javascript
JS实现简单的图书馆享元模式实例
Jun 30 Javascript
动态设置form表单的action属性的值的简单方法
May 25 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
May 02 Javascript
使用vue构建一个上传图片表单
Jul 04 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
Feb 22 Javascript
React中阻止事件冒泡的问题详析
Apr 12 Javascript
微信小程序云开发使用方法新手初体验
May 16 Javascript
JS制作简易计算器的实例代码
Jul 04 #Javascript
基于原生js实现九宫格算法代码实例
Jul 03 #Javascript
JavaScript DOM常用操作代码汇总
Jul 03 #Javascript
JavaScript缺少insertAfter解决方案
Jul 03 #Javascript
原生javascript如何实现共享onload事件
Jul 03 #Javascript
Vue如何实现监听组件原生事件
Jul 03 #Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 #Javascript
You might like
php下批量挂马和批量清马代码
2011/02/27 PHP
PHP重定向的3种方式
2013/03/07 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
基于jQuery实现仿微博发布框字数提示
2016/07/27 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
Vue3为什么这么快
2020/09/23 Javascript
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
python实现简易通讯录修改版
2018/03/13 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
大学生毕业自荐信
2013/10/10 职场文书
夜大毕业生自我鉴定
2013/10/31 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
举起手来观后感
2015/06/09 职场文书
民政局未婚证明
2015/06/15 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
python开发的自动化运维工具ansible详解
2021/08/07 Python
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB