JS去除重復字符串


去除重復字符串我用到的三種方法:

把例子貼上,用jquery方便些,首先要搭好環境,就是在同一目錄下(同一文件夾下)保證有所使用的jquery1.8.1(如果是其他版本就在html代碼中作相應改動)

第一、

[html]  view plain copy
 
  1. <html>  
  2. <head>  
  3. <script src="jquery-1.8.1.js"></script>  
  4.   
  5. <SCRIPT LANGUAGE="JavaScript">  
  6.   
  7. $(function(){  
  8.     $('#delRepeat').click(function(){  
  9.   
  10.   
  11.         var str = $('#repeatValue').val();  
  12.             var strArr=str.split("");//把字符串分割成一個數組  
  13.               
  14.             strArr.sort();//排序  
  15.             var result=new Array();//創建出一個結果數組  
  16.             var tempStr="";  
  17.             for(var i in strArr)  
  18.             {  
  19.                  if(strArr[i] != tempStr)  
  20.                  {  
  21.                       result.push(strArr[i]);  
  22.                       tempStr=strArr[i];  
  23.                  }  
  24.                  else  
  25.                  {  
  26.                       continue;  
  27.                  }  
  28.             }  
  29.             $('#noRepeat').val(result.join(""))//把數組連成字符串並展示到頁面  
  30.     })  
  31. })  
  32.   
  33.   
  34. </SCRIPT>  
  35. </head>  
  36. <body>  
  37. 原值<input id="repeatValue" type="text" ><input id="delRepeat" type="button" value="去重">  
  38. <input type="text" id="noRepeat">  
  39. </body>  
  40. </html>  

 

說明:通常就是把字符串分割成數組,再對數組操作,相對來說數組的方法多些,方便些,最后再join成字符串

關於sort()方法,之所以先對數組元素排序,就是因為可以把相同的字符歸到一起,就不用再雙層循環,要不然就得拿到每個元素,和剩余的逐個比對,這個sort會按照ASCII 字符順序進行升序排列

第二、

 

[html]  view plain copy
 
  1. <html>  
  2. <head>  
  3. <script src="jquery-1.8.1.js"></script>  
  4.   
  5. <SCRIPT LANGUAGE="JavaScript">  
  6.   
  7. $(function(){  
  8.     $('#delRepeat').click(function(){  
  9.         var str = $('#repeatValue').val();  
  10.             var strArr=str.split("");  
  11.             //排序  
  12.             strArr.sort();  
  13.                 var result =$.unique(strArr);  
  14.             $('#noRepeat').val(result.join(""));  
  15.                  
  16.     })  
  17. })  
  18.   
  19.   
  20. </SCRIPT>  
  21. </head>  
  22. <body>  
  23. 原值<input id="repeatValue" type="text" ><input id="delRepeat" type="button" value="去重">  
  24. <input type="text" id="noRepeat">  
  25. </body>  
  26. </html>  

 

 

說明,這個unique方法確實方便,但有兩個缺陷:

1、只對數組有效(直接字符串不行),並且該數組不能是數字數組,

2、只對相鄰的重復元素有效,隔開的不行。

例如:[a,a,b,b,c,c]---unique----[a,b,c]有效

[a,a,b,b,c,c,a]--unique-->[a,b,c,a]元素a仍然重復,無效

因此調用unique之前必須調用一下sort方法將其重復元素重排一下,挨在一起

但也因為調用了sort方法,順序給重排了如:[b,b,c,c,a,a]---unique-->[a,b,c]不是[b,c,a]

第三、

 

[html]  view plain copy
 
  1. <html>  
  2. <head>  
  3. <script src="jquery-1.8.1.js"></script>  
  4.   
  5. <SCRIPT LANGUAGE="JavaScript">  
  6.   
  7. $(function(){  
  8.     $('#delRepeat').click(function(){  
  9.         var str = $('#repeatValue').val();  
  10.                     var reg = /(.)(?=.*\1)/g;//預搜索方式(有的叫斷言)       
  11.                     var result = str.replace(reg, "");   
  12.                     $('#noRepeat').val(result);  
  13.     })  
  14. })  
  15. </SCRIPT>  
  16. </head>  
  17. <body>  
  18. 原值<input id="repeatValue" type="text" value="aca" ><input id="delRepeat" type="button" value="去重">  
  19. <input type="text" id="noRepeat">  
  20. </body>  
  21. </html>  

 

 

說明:

var reg =/(.)(?=.*\1)/g;

.匹配任意字符,但只能匹配任意字符中的一個

(.)加上()就是將匹配的該字符存儲起來供以后引用

(?=)預搜索(也有叫斷言的,也有叫預查的),指明某個字符的右側是什么,但不包含這部分,只取這個‘某個字符’

如:p(?=ing)     匹配字符串ping匹配成功,但匹配到的字符是p不是ping

(?=.*\1) 這個\1就是指的前面(.)的這個字符,之前說它被加上小括號就是被存儲起來了,現在\1就是取存儲的第一個(共一個)

*匹配次數,也有人稱之為量詞,指出現任意次

.*指出現任意次任意字符

(.)(?=.*\1)指第一個匹配字符,如果右側出現的內容中包含該字符時就匹配上該字符

 g    globle,全局匹配模式,匹配所有字符串

 

 

這個去重的結果其實是倒着來排序的,就是說重復字符出現在前面的都被置空了,是按一個字符從后往前出現的順序排的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM