javascript獲取字串中第一個不重複字元程式碼例項

admin發表於2017-03-31

本章節介紹一下如何利用原生的javascript獲取字串中,第一個不重複的字元。

這樣的需求不知道在實際應用中是否使用頻繁,不過也可以作為一個編碼思路去借鑑一下,或許能夠在其他功能的實現中帶來一定的啟發作用,下面直接看程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
function firstUniqueChar(str){
  var str = str || "",
  i = 0,
  k = "",
  _char = "",
  charMap = {},
  result = {name: "",index: str.length};
  
  for(i=0;i<str.length;i++){
    _char = str.charAt(i);
    if(charMap[_char] != undefined){
      charMap[_char] = -1;
    }
    else{
      charMap[_char] = i;
    }
  }
  
  for(k in charMap){
    if(charMap[k]<0){
      continue;
    }
    if(result.index>charMap[k]){
      result.index = charMap[k];
      result.name = k;
    }
  }
  return result.name;
}
var str="antzone is a good website,do you know?";
console.log(firstUniqueChar(str));

上面的程式碼實現了我們的要求,能夠獲取指定字串中,第一個不重複的字元,下面介紹一下它的實現過程。

一.程式碼註釋:

1.function firstUniqueChar(str){},此方法實現了查詢提取功能,引數就是目標字串。

2.var str = str || "",如果傳遞了str引數則使用str,否則賦值為空字串。3.i = 0,此變數用來所謂遍歷字串的索引值。

4.k = "",作為對映表的key,其實就是物件直接量的屬性。

5.charMap = {},存放字串一些相關資訊的對映表。

6.result = {name: "",index: str.length},存放最終結果的對映表,也就是物件直接量。

7.for(i=0;i<str.length;i++){

  _char = str.charAt(i);

  if(charMap[_char] != undefined){

    charMap[_char] = -1;

  }

  else{

    charMap[_char] = i;

  }

},此程式碼會遍歷字串中的每一個字元,然後和對映表進行比對嗎,對映表的屬性是字串中的字元,如果已經存在相關屬性,那麼說明字元是重複的,那麼就將屬性值設定為-1,如果不存在,那麼就新增對應的屬性,並將屬性值設定為對應字元的索引。

8.for(k in charMap){

  if(charMap[k]<0){

    continue;

  }

  if(result.index > charMap[k]){

    result.index = charMap[k];

    result.name = k;

  }

}遍歷對映表(物件直接量),如果屬性值小於0,那麼就說明它是重複的,那麼跳出本次迴圈。

如果不小於0,說明不重複,if(result.index > charMap[k]){}的作用是找出索引值最小的那個,不少朋友認為這裡的判斷毫無必要,認為第一個charMap[k]不小於0的K就是要查詢的元素,並非如此,可以參閱程式自動新增的屬性排序並非按照新增的順序一章節。

二.相關閱讀:

1.charAt()方法可以參閱javascript charAt()一章節。

2.物件直接量可以參閱js物件直接量簡單介紹一章節。

相關文章