1、删除数组重复值
Array.prototype.deleteRes = function(){ var temp = {}; var newAry = []; for(var i = 0,aryLen = this.length; i < aryLen; i++){ if(typeof temp[this[i]] == "undefined"){ temp[this[i]] = "true"; } } for(var j in temp){ newAry.push(j); } return newAry; }
在网上对于删除数组的重复值有几种思路,其它的思路较为简单,上面的思路有点难理解,在这里我把自己的思路备注一下,用以记录,如有错误,请指出,多谢!!
首先我们需要一个空的对象直接量,为什么呢?因为对象直接量中的内容是:属性名:属性值,属性名:属性值...这样的一个形式,这样方便我们进行筛选。然后我们需要一个空的数组,为了把筛选后的值装进来,并返回给我们。
然后,我们进行一个for循环,遍历调用这个方法的数组,在for循环中,我们来进行筛选,这里有点难理解,我们需要一个实例:
假设我们现在有一个数组:var arr = [111,222,333,444,111,222,555];我们来调用这个方法:arr.deleteRes();想象一下,当程序执行到第一个for循环的时候,如果i=0的时候,this[i] = 111,然后temp[this[i]]就是temp[111],了解对象直接量的人,应该会知道:temp[111]就是获取到属性名为111的属性值,但是111没有任何值,在循环中进行一个判断,如果temp[111]的类型是undefined,则将"true"赋值给temp[111],由于属性名为111的属性值不存在,判断为true,这样temp = {111:"true"},这样就将111加到temp中了,然后不停的循环。当循环到下一个111的时候,这个时候判断会发现temp[111] = "true",就不会添加进去了。然后再最后一个循环将属性名添加到newAry中,最后返回