2012-01-21 45 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/