JS实现数组去重方法总结(六种方法)


Posted in Javascript onJuly 14, 2017

方法一:

双层循环,外层循环元素,内层循环时比较值

如果有相同的值则跳过,不相同则push进数组

Array.prototype.distinct = function(){
 var arr = this,
  result = [],
  i,
  j,
  len = arr.length;
 for(i = 0; i < len; i++){
  for(j = i + 1; j < len; j++){
   if(arr[i] === arr[j]){
    j = ++i;
   }
  }
  result.push(arr[i]);
 }
 return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();    //返回[3,4,2,1]

方法二:利用splice直接在原数组进行操作

双层循环,外层循环元素,内层循环时比较值

值相同时,则删去这个值

注意点:删除元素之后,需要将数组的长度也减1.

Array.prototype.distinct = function (){
 var arr = this,
  i,
  j,
  len = arr.length;
 for(i = 0; i < len; i++){
  for(j = i + 1; j < len; j++){
   if(arr[i] == arr[j]){
    arr.splice(j,1);
    len--;
    j--;
   }
  }
 }
 return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

优点:简单易懂

缺点:占用内存高,速度慢

方法三:利用对象的属性不能相同的特点进行去重

Array.prototype.distinct = function (){
 var arr = this,
  i,
  obj = {},
  result = [],
  len = arr.length;
 for(i = 0; i< arr.length; i++){
  if(!obj[arr[i]]){ //如果能查找到,证明数组元素重复了
   obj[arr[i]] = 1;
   result.push(arr[i]);
  }
 }
 return result;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

方法四:数组递归去重

运用递归的思想

先排序,然后从最后开始比较,遇到相同,则删除

Array.prototype.distinct = function (){
 var arr = this,
  len = arr.length;
 arr.sort(function(a,b){  //对数组进行排序才能方便比较
  return a - b;
 })
 function loop(index){
  if(index >= 1){
   if(arr[index] === arr[index-1]){
    arr.splice(index,1);
   }
   loop(index - 1); //递归loop函数进行去重
  }
 }
 loop(len-1);
 return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];
var b = a.distinct();
console.log(b.toString());  //1,2,3,4,5,6,45,56

方法五:利用indexOf以及forEach

Array.prototype.distinct = function (){
 var arr = this,
  result = [],
  len = arr.length;
 arr.forEach(function(v, i ,arr){  //这里利用map,filter方法也可以实现
  var bool = arr.indexOf(v,i+1);  //从传入参数的下一个索引值开始寻找是否存在重复
  if(bool === -1){
   result.push(v);
  }
 })
 return result;
};
var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];
var b = a.distinct();
console.log(b.toString()); //1,23,2,3

方法六:利用ES6的set

Set数据结构,它类似于数组,其成员的值都是唯一的。

利用Array.from将Set结构转换成数组

function dedupe(array){
 return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]

拓展运算符(...)内部使用for...of循环

let arr = [1,2,3,3];
let resultarr = [...new Set(arr)]; 
console.log(resultarr); //[1,2,3]

下面给大家补充介绍合并数组并去重的方法

一、concat()方法

思路:concat() 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回。该方法会产生一个新的数组。

function concatArr(arr1, arr2){
  var arr = arr1.concat(arr2);
  arr = unique1(arr);//再引用上面的任意一个去重方法
  return arr;
}

二、Array.prototype.push.apply()

思路:该方法优点是不会产生一个新的数组。

var a = [1, 2, 3];
 var b = [4, 5, 6];
 Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6]
 //等效于:a.push.apply(a, b);
 //也等效于[].push.apply(a, b); 
 function concatArray(arr1,arr2){
   Array.prototype.push.apply(arr1, arr2);
   arr1 = unique1(arr1);
   return arr1;
 }

总结

以上所述是小编给大家介绍的JS实现数组去重方法总结(六种方法),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
读jQuery之三(构建选择器)
Jun 11 Javascript
JQuery的ON()方法支持的所有事件罗列
Feb 28 Javascript
js获取表格的行数和列数的方法
Oct 23 Javascript
jQuery实现监控页面所有ajax请求的方法
Dec 10 Javascript
jQuery扩展_动力节点Java学院整理
Jul 05 jQuery
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
node前端开发模板引擎Jade的入门
May 11 Javascript
VUE脚手架具体使用方法
May 20 Javascript
判断“命令按钮”是否被鼠标单击详解
Jul 31 Javascript
layer弹出层显示在top顶层的方法
Sep 11 Javascript
react+antd 递归实现树状目录操作
Nov 02 Javascript
JS监听Esc 键触发事键
Apr 14 Javascript
Javascript中Promise的四种常用方法总结
Jul 14 #Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 #Javascript
详解VUE中v-bind的基本用法
Jul 13 #Javascript
vue通过watch对input做字数限定的方法
Jul 13 #Javascript
深入理解vue $refs的基本用法
Jul 13 #Javascript
js自定义弹框插件的封装
Aug 24 #Javascript
解决vue里碰到 $refs 的问题的方法
Jul 13 #Javascript
You might like
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
PHP下常用正则表达式整理
2010/10/26 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
react 国际化的实现代码示例
2018/09/14 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
python中定义结构体的方法
2013/03/04 Python
Python 性能优化技巧总结
2016/11/01 Python
Python实现选择排序
2017/06/04 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
python中class的定义及使用教程
2019/09/18 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
const和static readonly区别
2013/05/20 面试题
年度献血先进个人事迹材料
2014/02/14 职场文书
搞笑征婚广告词
2014/03/17 职场文书
幼儿园课题方案
2014/06/09 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
2015年档案室工作总结
2015/05/23 职场文书
三八妇女节新闻稿
2015/07/17 职场文书