js数组去重的方法总结


Posted in Javascript onJanuary 18, 2019

一、普通的方法去重

1、简单的去重方法

// 最简单数组去重法
/*
* 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
* IE8以下不支持数组的indexOf方法
*/
function uniq(array){
  var temp = []; //一个新的临时数组
  for(var i = 0; i < array.length; i++){
    if(temp.indexOf(array[i]) == -1){
      temp.push(array[i]);
    }
  }
  return temp;
}
var newArray = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(newArray));// [1, 2, 4, 9, 6, 7, 5, 3]
/*
var newArray = ['mu','zi','dig','big','z','mu','zi','muzidigbig']
console.log(uniq(newArray));//["mu", "zi", "dig", "big", "z", "muzidigbig"]
*/

js数组去重的方法总结

2、数组下标法

/*
* 还是得调用“indexOf”性能跟方法1差不多,
* 实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,
* 那么表示第i项是重复的,忽略掉。否则存入结果数组。
*/
function uniq(array){
  var temp = [];
  for(var i = 0; i < array.length; i++) {
    //如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
    if(array.indexOf(array[i]) == i){
      temp.push(array[i])
    }
  }
  return temp;
}
var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));//[1, 2, "2", 4, 9, "a", 3, 5, 6]

3、排序后相邻去除法

/*
* 给传入数组排序,排序后相同值相邻,
* 然后遍历时,新数组只加入不与前一值重复的值。
* 会打乱原来数组的顺序
*/
function uniq(array){
  array.sort();
  console.log(array.sort());
  var temp=[array[0]];
  for(var i = 1; i < array.length; i++){
    if( array[i] !== temp[temp.length-1]){
      temp.push(array[i]);
    }
  }
  return temp;
}
var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));//[1, "2", 2, 3, 4, 5, 6, 9, "a"]

4、优化遍历数组法

// 思路:获取没重复的最右一值放入新数组
/*
* 推荐的方法
* 方法的实现代码相当酷炫,
* 实现思路:获取没重复的最右一值放入新数组。
* (检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)
*/
function uniq(array){
  var temp = [];
  var index = [];
  var l = array.length;
  for(var i = 0; i < l; i++) {
    for(var j = i + 1; j < l; j++){
      if (array[i] === array[j]){
        i++;
        j = i;
      }
    }
    temp.push(array[i]);
    index.push(i);
  }
  console.log(index);//[0, 2, 5, 6, 7, 8, 9]
  return temp;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(uniq(aa));// [1, 2, 3, 6, 5, "3", "muzi"]

5.数组includes()去重

//利用数组原型对象上的includes方法
function unique(arr){
 var bArr= [];
 for(var i=0; i<arr.length; i++){
  if( !bArr.includes(arr[i]) ){ // 如果bArr新数组包含当前循环item
   bArr.push(arr[i]);
  }
 }
 return bArr;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(unique(aa))//[1, 2, 3, 5, 6, "3", "muzi"]

6.数组原型对象上的filter和includes方法

//利用数组原型对象上的filter和includes方法
function unique6(arr){
 var bArr= [];
 bArr= arr.filter(function(item){
 return bArr.includes(item) ? null : bArr.push(item);
 });
 return bArr;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(unique6(aa))//[1, 2, 3, 5, 6, "3", "muzi"]

7.数组原型对象上的forEach和includes方法

//利用数组原型对象上的forEach和includes方法
function unique7(arr){
 var bArr= [];
 arr.forEach(function(item){
  bArr.includes(item) ? null : bArr.push(item);
 }); 
 return bArr;
}
var aa = [1,2,2,3,5,3,6,5,'3','muzi'];
console.log(unique7(aa))//[1, 2, 3, 5, 6, "3", "muzi"]

二、原型对象去重

方法一:

思路:1)构建一个临时数组存放结果;

            2)循环遍历当前数组,判断当前数组下标为i的元素是否已经保存在临时数组,如果已保存,则跳过,否则将此元素保存到临时数组中。

Array.prototype.method1 = function(){
    var arr=[];  //定义一个临时数组
    for(var i = 0; i < this.length; i++){  //循环遍历当前数组
      //判断当前数组下标为i的元素是否已经保存到临时数组
      //如果已保存,则跳过,否则将此元素保存到临时数组中
      if(arr.indexOf(this[i]) == -1){
        arr.push(this[i]);
      }
    }
    return arr;
  };
  var arrNum1 = [1,4,1,1,3,3,4,6,7,8,3,7,0,2,11,2,'muzi','digbig','muzi'];
  console.log(arrNum1.method1());//[1, 4, 3, 6, 7, 8, 0, 2, 11, "muzi", "digbig"]

三、es6去重

let arr = [1,2,2,3,4,4,4];
  let s = new Set(arr);
  //结果:Set {1,2,3,4}
  let newArr = Array.from(s);
  //结果:[1,2,3,4],完成去重

js数组去重的方法总结

若有不足请多多指教!希望给您带来帮助!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Javascript 相关文章推荐
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
Jun 02 Javascript
匹配任意字符的正则表达式写法
Apr 29 Javascript
单独使用CKFinder选择图片的方法
Aug 21 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
Aug 11 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
Sep 19 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
Nov 17 Javascript
vue项目持久化存储数据的实现代码
Oct 01 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
详解element上传组件before-remove钩子问题解决
Apr 08 Javascript
浅谈克隆 JavaScript
Nov 02 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
Jan 18 #jQuery
highCharts提示框中显示当前时间的方法
Jan 18 #Javascript
微信小程序使用canvas的画图操作示例
Jan 18 #Javascript
js中数组对象去重的两种方法
Jan 18 #Javascript
js根据需要计算数组中重复出现某个元素的个数
Jan 18 #Javascript
js中的reduce()函数讲解
Jan 18 #Javascript
微信小程序实现分享朋友圈的图片功能示例
Jan 18 #Javascript
You might like
PHP 缓存实现代码及详细注释
2010/05/16 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
用JAVASCRIPT如何给&amp;lt;textarea&amp;gt;&amp;lt;/textarea&amp;gt;赋值
2007/04/20 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
爱祖国演讲稿
2014/05/04 职场文书
真诚的求职信
2014/07/04 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
服务明星事迹材料
2014/12/29 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
CPU不支持Windows11系统怎么办
2021/11/21 数码科技