2012-01-21 82 views
1

我想通過沒有分隔符分割字符串(有效地將它分割爲每個字符),然後按字母順序將對象索引到對象中。我希望它利用jQuery。用無分隔符分割字符串,然後使用alpha索引將對象索引到對象中

這裏是我的嘗試,但這種分成數組,元素用方括號(obj_to_chars[0]obj_to_chars[1]等)進行訪問,但我希望能夠通過使用點符號來訪問元素,像這樣:obj_of_chars.aobj_of_chars.b

var str = 'The quick brown fox jumps over the lazy dog.'; 
var obj_of_chars = {}; 
obj_of_chars = str.split(""); 
console.log(obj_of_chars); 
// what I have: [ "T", "h", "e", " ", "q", "u", "i", "c", "k", " ", "b", "r", "o", "w", "n", " fox", " ", "j", "u", "m", "p", "s", " ", "o", "v", "e", "r", " ", "t", "h", "e", " ", "l", "a", "z", "y", " ", "d", "o", "g", "." ] 
// what I want: { a: "T", b: "h", c: "e", d: " ", e: "q", ..., aa, ab, ... } 

編輯:該解決方案應該允許在對象超過26個字符。(對不起那些誰已經寫了一段代碼,才意識到我需要超過26個字符)

+0

你不應該改變遊戲規則,你問的問題後。特別是當你說「應該允許超過26個字符」時,但並不指定應該如何完成。他們應該切換到'aa','bb'等嗎? – mrtsherman

+0

是的。 'a','b',...,'z','aa','ab',..,'az','ba',... –

回答

4

下面是做這件事:

var input = "Hello world"; 
var output = {}; 
for(var i = 0; i < input.length; ++i) { 
    var prop = String.fromCharCode(97 + i); // 97 = ASCII code for "a" 
    output[prop] = input.charAt(i); 
} 

如果輸入字符串的長度大於26,這段代碼將溢出字母表並開始使用非alpha字符作爲鍵。如果您想避免這種情況,請修改設置prop的表達式。

更新:以下是如何繼續字母數字屬性名計劃無限期:

var input = "Hello worldHello worldHello worldHello worldHello worldHello world"; 
var output = {}; 
var name = ['a']; 
for(var i = 0; i < input.length; ++i) { 
    output[name.join("")] = input.substr(i, 1); 
    for (var j = name.length - 1; j >= 0; --j) { 
     if(name[j] != 'z') { 
      name[j] = String.fromCharCode(name[j].charCodeAt(0) + 1); 
      break; 
     } 
     else { 
      name[j] = 'a'; 
      if(j == 0) { 
       name.unshift('a'); 
      } 
     } 
    } 
} 
+0

哦,那太酷了。我知道有人會來這裏,用一些非常簡單的東西殺死它。 – mrtsherman

+1

+1。雖然你可能喜歡使用'.charAt(i)'而不是'.substr(i,1)',這比我的回答(它保留了問題的'.split()'想法)要好。 – nnnnnn

+0

如果僅限於26個字符,則不能很好地開發。 –

1

你說你想使用jQuery的,但我不明白爲什麼。

這可以用普通的JavaScript輕鬆完成,所以除了使用jQuery .each()方法我不確定jQuery如何幫助你。

var str = 'my string', 
    obj_of_chars = {}, 
    arr_of_chars = str.split(""); 

for (var i = 0; i < arr_of_chars.length; i++) 
    obj_of_chars[String.fromCharCode(i+97)] = arr_of_chars[i]; 

console.log(obj_of_chars); 

演示:http://jsfiddle.net/bGSvD/