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 相关文章推荐
java script编程起步(第三课)
Jan 10 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
Oct 28 Javascript
20个非常有用的PHP类库 加速php开发
Jan 15 Javascript
自动最大化窗口的Javascript代码
May 22 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
Feb 04 Javascript
javascript实现Table排序的方法
May 15 Javascript
详解 javascript中offsetleft属性的用法
Nov 11 Javascript
JS控制静态页面传递参数并获取参数应用
Aug 10 Javascript
Node.js与Sails redis组件的使用教程
Feb 14 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
微信小程序网络请求实现过程解析
Nov 06 Javascript
Postman无法正常返回结果问题解决
Aug 28 Javascript
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
解析strtr函数的效率问题
2013/06/26 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
javascript Window及document对象详细整理
2011/01/12 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
JS的get和set使用示例
2014/02/20 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
JQuery基础语法小结
2015/02/27 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
vue组件name的作用小结
2018/05/23 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
Vue程序调试的方法
2019/06/17 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
python实现简易版计算器
2020/06/22 Python
pycharm配置git(图文教程)
2019/08/16 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
银行毕业实习自我鉴定
2013/09/19 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
美食节策划方案
2014/05/26 职场文书
环境科学专业求职信
2014/08/04 职场文书
车间主任岗位职责
2015/02/03 职场文书
给朋友的道歉短信
2015/05/12 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang