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 相关文章推荐
身份证号码前六位所代表的省,市,区, 以及地区编码下载
Apr 12 Javascript
js验证模型自我实现的具体方法
Jun 21 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
Jun 20 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
Oct 09 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
js数组与字符串常用方法总结
Jan 13 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
Webpack框架核心概念(知识点整理)
Dec 22 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
Jan 26 Javascript
JQuery常见节点操作实例分析
May 15 jQuery
使用jQuery实现掷骰子游戏
Oct 24 jQuery
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图片的二进制转换实现方法
2014/12/15 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
Vue props用法详解(小结)
2018/07/03 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
Python算法之图的遍历
2017/11/16 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
英文版销售经理个人求职信
2013/11/20 职场文书
九月份红领巾广播稿
2014/01/22 职场文书
奥运会口号
2014/06/13 职场文书
校园广播稿精选
2014/10/01 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
会计岗位工作总结
2015/08/12 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL