js如何查詢字元處中第一個不重複的字元

admin發表於2017-03-28

可能在實際功能有這樣的變態需求,就是獲取字串中第一個不重複的字元,之所以說變態因為需求比較特別,非常的少見,並不是難度變態,下面就通過程式碼例項介紹一下如何實現此功能。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
function firstUniqueChar(str){
  var str=str||"",
      index = 0,
      k = "",
      _char = "",
      charMap = {},
      result={name: "",index: str.length};
 
  for(index=0;index<str.length;index++){
    _char = str.charAt(index);
    if(charMap[_char] != undefined){
      charMap[_char] = -1;
    }
    else{
      charMap[_char] = index;
    }
  }
 
  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";
console.log(firstUniqueChar(str));

上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。

一.程式碼註釋:

1.function firstUniqueChar(str){},此函式實現了超找功能,引數是要查詢的字串。

2.var str=str||"",如果str為空則賦空值。

3.index = 0,for迴圈的時候作為字串中字元的索引。

4.k = "",宣告一個變數並賦初值為空,其實它是用來作為一個物件屬性。

5._char = "",宣告一個變數並賦初值為空,用來儲存字串指定索引位置的字元。

6.charMap = {},建立一個物件,後面詳細介紹它的作用。

7.result={name: "",index: str.length},建立一個物件。

8.for(index=0;index<str.length;index++){},遍歷字串中的每一個字元。

9. _char = str.charAt(index),獲取當前索引位置的字元。

10.if(charMap[_char] != undefined){

  charMap[_char] = -1;

}charMap物件將字串中的字元作為屬性名稱。

判斷物件相應的屬性值是否已經存在,如果存在的話,那麼就說明這個字元已經重複了,然後將屬性值設定為-1。

11.else{charMap[_char] = index;},如果至此還沒有重複的話,就將屬性值設定為對應的索引。

12.for(k in charMap),遍歷charMap物件的每一個屬性。

13.if(charMap[k]<0){continue;},如果小於0的話,說明重複,跳過,繼續下一個迴圈。

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

  result.index = charMap[k];

  result.name = k;

},其實這個有點麻煩了,因為charMap的屬性是按照字元在字串中的先後順序排列的,那麼第一個大於0的屬性值對應的屬性就是要獲取的字元。15.return result.name,返回找到的字元。

二.相關閱讀:

1.charAt()函式可以參閱javascript charAt()一章節。

2.遍歷物件屬性可以參閱javascript for in例項程式碼一章節。

相關文章