JS数组去重常用方法实例小结【4种方法】


Posted in Javascript onMay 28, 2018

本文实例讲述了JS数组去重常用方法。分享给大家供大家参考,具体如下:

js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法

贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill

Array.prototype.indexOf = Array.prototype.indexOf || function(item) {
  for (var i = 0, j = this.length; i < j; i++) {
    if (this[i] === item) {
      return i;
    }
  }
  return -1;
}
Array.prototype.forEach = Array.prototype.forEach || function(callback, thisArg) {
  if (!callback || typeof callback !== 'function') return;
  for (var i = 0, j = this.length; i < j; i++) {
    callback.call(thisArg, this[i], i, this);
  }
}

方法一:遍历数组,建立新数组,利用indexOf判断是否存在于新数组中,不存在则push到新数组,最后返回新数组

function removeDuplicatedItem(ar) {
  var ret = [];
  for (var i = 0, j = ar.length; i < j; i++) {
    if (ret.indexOf(ar[i]) === -1) {
      ret.push(ar[i]);
    }
  }
  return ret;
}

方法二:遍历数组,利用object对象保存数组值,判断数组值是否已经保存在object中,未保存则push到新数组并用object[arrayItem]=1的方式记录保存

function removeDuplicatedItem2(ar) {
  var tmp = {},
    ret = [];
  for (var i = 0, j = ar.length; i < j; i++) {
    if (!tmp[ar[i]]) {
      tmp[ar[i]] = 1;
      ret.push(ar[i]);
    }
  }
  return ret;
}

方法三:数组下标判断法, 遍历数组,利用indexOf判断元素的值是否与当前索引相等,如相等则加入

function removeDuplicatedItem3(ar) {
  var ret = [];
  ar.forEach(function(e, i, ar) {
    if (ar.indexOf(e) === i) {
      ret.push(e);
    }
  });
  return ret;
}

方法四:数组先排序, 然后比较俩数组一头一尾进行去重

function removeDuplicatedItem4(ar) {
  var ret = [],
    end;
  ar.sort();
  end = ar[0];
  ret.push(ar[0]);
  for (var i = 1; i < ar.length; i++) {
    if (ar[i] != end) {
      ret.push(ar[i]);
      end = ar[i];
    }
  }
  return ret;
}

有其他好的方式 ,欢迎补充。

Javascript 相关文章推荐
MooTools 1.2介绍
Sep 14 Javascript
javascript强大的日期函数代码分享
Sep 04 Javascript
JavaScript设置body高度为浏览器高度的方法
Feb 09 Javascript
动态加载jQuery的方法
Jun 16 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
Sep 08 Javascript
JS中的三个循环小结
Jun 20 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
Aug 18 Javascript
详解Vuex管理登录状态
Nov 13 Javascript
详解Angular Karma测试的持续集成实践
Nov 15 Javascript
通过js随机函数Math.random实现乱序
May 19 Javascript
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
jQuery中将json数据显示到页面表格的方法
May 27 #jQuery
javascript少儿编程关于返回值的函数内容
May 27 #Javascript
《javascript少儿编程》location术语总结
May 27 #Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
May 27 #Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
May 27 #Javascript
JS面向对象的程序设计相关知识小结
May 26 #Javascript
JavaScript门道之标准库
May 26 #Javascript
You might like
php自定义的格式化时间示例代码
2013/12/05 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
利用Blob进行文件上传的完整步骤
2018/08/02 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
python 实现性别识别
2020/11/21 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
智能电子应届生求职信
2013/11/10 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
标准单位租车协议书
2014/09/23 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
诉讼授权委托书
2014/10/15 职场文书
新员工辞职信范文
2015/05/12 职场文书
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL