js-数组去重(有五种方法)-包含数组扩展形式
来源:互联网 发布:网站美工需要会什么 编辑:程序博客网 时间:2024/05/16 15:29
对于arr,arr1可以使用简单的去重方法,但要注意时间复杂度的比较。
对于arr2,可以对里面的数组进行toString(),转化为字符串再比较,不能直接进行数组比较。
对于arr3,判断null时需要注意,null不等于null,所以需增加条件this[i]==this[i],当this[i]!=this[i]时,说明this[i]为null,需另外处理
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>js-数组去重</title> <meta content="http://note.youdao.com/share/index.html?id=55da195bec366816c2093d2e630fb812&type=note#/"> <style></style> <script> var tem = new Array("2","3","5","3","4","5"); var arr = ['1a','ni','2','ni','1a','5']; //字符串数组 var arr1 = [1,5,2,3,1,5,9]; //数字数组 var arr2 = [1,5,[1,2],4,9,1,[1,2]]; //包含数组的数组 var arr3 = [1,4,undefined,7,8,null,null]; //包含null的数组 //1. 遍历,数组下标去重法 //时间复杂度:O(n^2),indexOf本身也消耗了O(n)的复杂度,空间复杂度:O(n) //IE8以下不支持indexOf Array.prototype.removeRepeat1 = function() { var res =[this[0]]; for(var i=1; i<this.length;i++){ //从第二项开始遍历 if(this.indexOf(this[i])==i){ res.push(this[i]); } } return res; }; //2. 遍历,比较备用数组去重法 Array.prototype.removeRepeat2 = function() { var res =[]; for(var i=0; i<this.length;i++){ if(res.indexOf(this[i])==-1){ res.push(this[i]); } } return res; }; //3. 遍历,hash去重法 //类似于,利用对象的属性不能相同的特点进行去重 //时间复杂度:O(n),空间复杂度:O(n) Array.prototype.removeRepeat3 = function() { var h= {}; //哈希表 var res = []; for(var i=0; i<this.length;i++){ if(!h[this[i]]){ //如果hash表中没有当前项 h[this[i]]=true; //存入hash表 res.push(this[i]); } } return res; }; //4. 遍历,Set去重法(ES6的 Set) //时间复杂度:O(n),空间复杂度:O(n) Set兼容性不好,IE11以下不支持 Array.prototype.removeRepeat4 = function(){ var result = new Set(); for(var i=0; i<this.length; i++){ result.add(this[i]); } return result; } //Set的方法二:Array.from(array)把Set转化为数组 Array.prototype.removeRepeat41 = function(){ return Array.from(new Set(this));; } //5. 排序后相邻去重法 Array.prototype.removeRepeat5 = function() { this.sort(); var res=[this[0]]; for(var i = 1; i< this.length; i++){ if(this[i]!=this[i-1]){ res.push(this[i]); } } return res; } var result = arr2.removeRepeat1(); for(var i=0; i< result.length; i++){ console.log(result[i]); } /*console.log(result); //set数组直接输出就好,不用遍历*/ /*对于arr2,可以对里面的数组进行toString(),转化为字符串再比较,不能直接进行数组比较。*/ //双重循环做arr2 var arr2 = [1,[1],5,[1,2],4,9,1,[1,2],[1]]; //包含数组的数组 //先toString()在比较,注意不能使用全等,数组全等要求地址也相同的 Array.prototype.unique = function() { var res=[]; for(var i=0;i<this.length;i++){ var flag = false; for(var j=0;j<res.length;j++){ if(this[i].toString()==res[j].toString() && (typeof this[i])==(typeof res[j])){ flag = true; } } if(!flag){ res.push(this[i]); } } return res; }; /*对于arr3,判断null时需要注意,null不等于null,所以需增加条件this[i]==this[i],当this[i]!=this[i]时,说明this[i]为null,需另外处理*/ //全等 var arr3 = [1,4,undefined,7,8,null,null]; //包含null的数组 Array.prototype.unique = function() { var res=[]; for(var i=0;i<this.length;i++){ var flag = false; for(var j=0;j<res.length;j++){ if(this[i]===res[j]){ flag = true; } } if(!flag){ res.push(this[i]); } } return res; }; var result = arr3.unique(); for(var i=0; i< result.length; i++){ console.log(result[i]); } </script></head><body></body></html>
0 0
- js-数组去重(有五种方法)-包含数组扩展形式
- js 数组扩展元素去重的方法
- js中数组去重,字符串包含数组包含
- Js数组去重方法
- js数组去重方法
- JS数组去重方法
- 数组去重(方法)
- JS 数组去重
- js数组去重
- js 数组去重
- js 数组去重
- js数组去重
- js 数组去重
- js数组去重
- JS 数组去重
- //js数组去重
- js-数组去重
- js数组去重
- 第11周项目1-验证算法(3)中序线索化二叉树的算法验证
- Android:基础控件之(三)输入框 EditText
- zabbix监控zookeeper健康状况
- IE下resize无限触发问题。
- 第十一周 项目1(3)中序线索化二叉树的算法验证
- js-数组去重(有五种方法)-包含数组扩展形式
- 第十周项目二 二叉树遍历的递归算法
- 白化
- 第十一周项目一(4)哈夫曼树
- 第11周项目1-中序线索化二叉树的算法验证
- Android判断APP是否第一次启动
- Android M 6.0系统源码在Ubuntu里面编译配置
- Android studio 上非常好用的快捷键
- UML笔记