JS数组去重和排序方法总结
来源:互联网 发布:多变量最优化 编辑:程序博客网 时间:2024/04/30 15:59
- 一去重
- 二排序
一、去重
第一种是比较常规的方法
思路:- 构建一个新的数组存放结果
- for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
- 若结果数组中没有该元素,则存到结果数组中
代码如下:
Array.prototype.unique1 = function(){ var res = [this[0]]; for(var i = 1; i < this.length; i++){ var repeat = false; for(var j = 0; j < res.length; j++){ if(this[i] == res[j]){ repeat = true; break; } } if(!repeat){ res.push(this[i]); } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique1());
2.第二种方法比上面的方法效率要高
思路:
先将原数组进行排序
检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
如果不相同,则将该元素存入结果数组中
复制代码 代码如下:
Array.prototype.unique2 = function(){ this.sort(); //先排序 var res = [this[0]]; for(var i = 1; i < this.length; i++){ if(this[i] !== res[res.length - 1]){ res.push(this[i]); } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique2());
第二种方法也会有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。
3.第三种方法(推荐使用)
思路:
创建一个新的数组存放结果
创建一个空对象
for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。
复制代码 代码如下:
Array.prototype.unique3 = function(){ var res = []; var json = {}; for(var i = 0; i < this.length; i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]] = 1; } } return res;}var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];alert(arr.unique3());
二、排序
console.log("------默认排序(ASCII字符排序)------"); var arr = [1,2,55,12,88]; arr.sort(); //ASCII字符代码从小到大排序 console.log(arr.toString()); console.log("------自定义函数排序------"); var arr1 = [1,2,55,12,88]; arr1.sort(function(a,b){ //自定义函数排序 var a1= parseInt(a); var b1= parseInt(b); if(a1<b1){ return -1; }else if(a1>b1){ return 1; } return 0; }); console.log(arr1.toString()); console.log("------反转数组------"); var reArr = arr1.reverse(); //将数组中元素的顺序倒转 console.log(reArr.toString()); console.log("------按年龄正序排序------"); var arr2 = []; arr2.push({date:"20130101",name:"lee",age:2}); arr2.push({date:"20130101",name:"wang",age:12}); arr2.push({date:"20130202",name:"huang",age:30}); arr2.push({date:"20130202",name:"keke1",age:14}); arr2.push({date:"20130202",name:"keke2",age:31}); arr2.push({date:"20130303",name:"keke3",age:56}); arr2.push({date:"20130303",name:"keke4",age:22}); arr2.push({date:"20130303",name:"keke5",age:32}); arr2.sort(function(a,b){ if(a.age<b.age){ return -1; }else if(a.age>b.age){ return 1; } return 0; }); for(var i=0;i<arr2.length;i++){ console.log(arr2[i].date + ", " + arr2[i].name + ", " + arr2[i].age); } console.log("------按date倒序,age正序排序------"); arr2.sort(function(a,b){ if(a.date<b.date){ return 1; }else if(a.date>b.date){ return -1; }else{ if(a.age<b.age){ return -1; }else if(a.age>b.age){ return 1; } return 0; } }); for(var i=0;i<arr2.length;i++){ console.log(arr2[i].date + ", " + arr2[i].name + ", " + arr2[i].age); }
1 0
- JS数组去重和排序方法总结
- JS中的数组去重方法总结
- JS-数组去重的方法总结
- js数组去重的方法总结
- JS中的数组去重方法总结
- js数组的去重和排序
- js数组排序去重
- JS实现数组去重方法总结(六种方法)
- Js数组去重方法
- js数组去重方法
- JS数组去重方法
- js数组去重的三种常用方法总结
- js数组去重的三种常用方法总结
- js数组Array去重方法总结及验证
- js数组去重的三种常用方法总结
- js数组去重的常用方法总结
- js数组去重的几种常用方法总结
- JS学习之数组去重方法总结
- mybatis的一些实用技巧
- 使用百度定位sdk,在text中显示当前位置信息
- NSTimer直接使用需要在主线程中使用
- STM32学习笔记之DMA使用
- 解决FTPClient不能访问文件的问题150 Opening ASCII mode data connection
- JS数组去重和排序方法总结
- android项目重构经验总结
- JS--比想象中简单
- DFS——palindrome-partitioning
- STM32中GPIO的8种工作模式!
- java8:Supplier和Stream
- Floyd算法--+贪心算法
- 实验吧/隐写术/so beautiful so white
- 如何为eclipse中的文件设置默认编码