使用JavaStcript对数组元素去重的方法
在做javascript開(kāi)發(fā)的時(shí)候,經(jīng)常會(huì)遇到數(shù)組元素重復(fù)的問(wèn)題,而javascript Array又沒(méi)有直接提供方法解決此問(wèn)題,還需要自己去實(shí)現(xiàn)。
方案一:
思路:
1.構(gòu)建一個(gè)新的數(shù)組存放結(jié)果;
2.for循環(huán)中每次從原數(shù)組中取出一個(gè)元素,用這個(gè)元素循環(huán)與結(jié)果數(shù)組對(duì)比;
3.若結(jié)果數(shù)組中沒(méi)有該元素,則存到結(jié)果數(shù)組中。
代碼如下:
<script>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','b','c','c','b',2,2,2,3,4,2]alert(arr.unique1());</script>結(jié)果如下:
?
方案二:
(比方案一效率要高)
思路:
1.先將原數(shù)組進(jìn)行排序
2.檢查原數(shù)組中的第i個(gè)元素 與 結(jié)果數(shù)組中的最后一個(gè)元素是否相同,因?yàn)橐呀?jīng)排序,所以重復(fù)元素會(huì)在相鄰位置
3.如果不相同,則將該元素存入結(jié)果數(shù)組中
代碼如下:
<script>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=[2,'h','e','e','e','l','o',2,2,3,4,2]alert(arr.unique2());</script>結(jié)果如下:
第二種方法也會(huì)有一定的局限性,因?yàn)樵谌ブ厍斑M(jìn)行了排序,所以最后返回的去重結(jié)果也是排序后的。如果要求不改變數(shù)組的順序去重,那這種方法便不可取了。
?
方案三(推薦的方案)
思路:
1.創(chuàng)建一個(gè)新的數(shù)組存放結(jié)果
2.創(chuàng)建一個(gè)空對(duì)象
3.for循環(huán)時(shí),每次取出一個(gè)元素與對(duì)象進(jìn)行對(duì)比,如果這個(gè)元素不重復(fù),則把它存放到結(jié)果數(shù)組中,同時(shí)把這個(gè)元素的內(nèi)容作為對(duì)象的一個(gè)屬性,并賦值為1,存入到第2步建立的對(duì)象中。
說(shuō)明:至于如何對(duì)比,就是每次從原數(shù)組中取出一個(gè)元素,然后到對(duì)象中去訪問(wèn)這個(gè)屬性,如果能訪問(wèn)到值,則說(shuō)明重復(fù)。
代碼如下:
<script>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=[3,'沈','你好','沈','你好','hello','hello',5,5,3,4,4]alert(arr.unique3());</script>結(jié)果如下:
?
?
?
?
?
參考:http://www.jb51.net/article/46154.htm
總結(jié)
以上是生活随笔為你收集整理的使用JavaStcript对数组元素去重的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android一个ListView列表之
- 下一篇: Android动画之Property属性