javscript巧用对象特性去掉数组重复项并排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javscript巧用对象特性去掉数组重复项并排序相关的知识,希望对你有一定的参考价值。
当有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后运行alert(a[0]),两种情况下的运行结果都是1,这就是说,数据集合既可以用数组表示,也可以用对象表示!但是我们是无法定义一个具有两个相同key值的object,而我们正可以利用这种特性来去掉数组中的重复项。
- 把数组转成一个js对象
- 把数组中的值变成对象中的key
- 把对象还原成数组
//把数组转成一个js对象
function toObj(arr){ var obj = {}; for(var i=0;i<arr.length;i++){ obj[arr[i]] = true; } return obj; } function objkeys(obj){ var arr = []; for(var attr in obj){ if(obj.hasOwnProperty(attr)){ //使用hasOwnProperty比较严谨 arr.push(attr); } } return arr; } function uniq(arr){ return objkeys(toObj(arr)); } var arr1 = [4,5,2,56,56,54,4,4,2,9,10] alert(uniqSort(arr1)); //2,4,5,9,10,54,56
我们发现用这种方法不但可以给去重而且还可以排序,一举两得!
上面提到的hasOwnProperty方法说明下:
javascript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。 使用方法:
object.hasOwnProperty(proName)
其中参数object是必选项。一个对象的实例。
proName是必选项。一个属性名称的字符串值。
如果 object 具有指定名称的属性,那么JavaScript中hasOwnProperty函数方法返回 true;反之则返回 false。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。在下例中,所有的 String 对象共享一个公用 split 方法。下面的代码将输出 false 和 true。
var s = new String("JScript");
print(s.hasOwnProperty("split"));
print(String.prototype.hasOwnProperty("split"));
另外在说一下其它我们常用的方法的思路
1.构建一个新的数组存放结果
2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
3.若结果数组中没有该元素,则存到结果数组中
-------------------
1.先将原数组进行排序
2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
3.如果不相同,则将该元素存入结果数组中
-------------------
1.创建一个新的数组存放结果
2.创建一个空对象
3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中
- 上面的方法代码就不展示了,百度都有,第二种方法有局限性在于它打破了数组原先的排序!
以上是关于javscript巧用对象特性去掉数组重复项并排序的主要内容,如果未能解决你的问题,请参考以下文章