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 相关文章推荐
jQuery 打造动态下滑菜单实现说明
Apr 15 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
Feb 27 Javascript
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
使用canvas实现仿新浪微博头像截取上传功能
Sep 02 Javascript
JS实现带鼠标效果的头像及文章列表代码
Sep 27 Javascript
JavaScript仿微博输入框效果(案例分析)
Dec 06 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
认识jQuery的Promise的具体使用方法
Oct 10 jQuery
js实现GIF动图分解成多帧图片上传
Oct 24 Javascript
微信小程序聊天功能的示例代码
Jan 13 Javascript
vue+iview实现文件上传
Nov 17 Vue.js
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空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
19个Android常用工具类汇总
2014/12/30 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
jQuery find和children方法使用
2011/01/31 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
Python yield使用方法示例
2013/12/04 Python
python的dict,set,list,tuple应用详解
2014/07/24 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
python word转pdf代码实例
2019/08/16 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
基于python的列表list和集合set操作
2019/11/24 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
高级编程求职信模板
2014/02/16 职场文书
服务之星事迹材料
2014/05/03 职场文书
规范化管理年活动总结
2014/08/29 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python