js中数组的去重

来源:互联网 发布:mac如何隐藏下面的菜单 编辑:程序博客网 时间:2024/05/21 21:01

js对象有一个特性:

  js中对象的key(属性名)是永远不会重复的!

js数组去重

方法一:

//将数组arr去掉重复的值var arr = [3,1,5,1,23,5,11];//1.把数组元素转换成对象属性function toObject(arr){var obj = {};var j;for(var i=0,j=arr.length;i<j;i++){obj[arr[i]] = true; //利用js对象属性名不会重复的特性,将数组元素设置为对象属性//console.log(obj);}return obj;}//2.把对象属性转换回新数组元素function toArray(obj){var arr = [];for(var attr in obj){if(obj.hasOwnProperty(attr)){arr.push(attr);}}return arr;}//去重函数function uniq(arr){return toArray(toObject(arr));}alert(uniq(arr));
以上时雅虎yui的一段源码,但是我测试的时候结果是[1,3,5,11,23],obj对象在设置属性的时候进行了自动排序,我暂时还不知道是什么原因。


方法二:

下面是网上查的一个方法,原理应该跟上面是一样的

var arr = [3,1,5,1,23,5,11];function uniq(arr){var obj = {}, newArr = []; //空对象和新数组for(var i=0;i<arr.length;i++){if(!obj[arr[i]]){obj[arr[i]] = true;newArr.push(arr[i]);}}return newArr;}alert(uniq(arr)) //[3,1,5,23,11]

方法三:

利用indexOf()

function uniq(arr){var newArr = [];for(var i=0;i<arr.length;i++){if(newArr.indexOf(arr[i])==-1){ //js在执行indexOf方法时会遍历数组直到找到,会耗费很多时间newArr.push(arr[i]);}}return newArr;}alert(uniq(arr))
indexOf()效率并不高





0 0
原创粉丝点击