我想不使用分隔符分割字符串(有效地按每个字符分割字符串),然后按字母顺序索引到对象中。我希望它利用 jQuery。
这是我的尝试,但这会分成一个数组,并且通过方括号访问元素(obj_to_chars[0]
、obj_to_chars[1]
等),但我希望能够使用点表示法访问元素,如下所示: obj_of_chars.a
、obj_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 个字符)
最佳答案
这是一种方法:
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,此代码将溢出字母表并开始使用非字母字符作为键。如果您想避免这种情况,请修改相应设置 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');
}
}
}
}
关于jquery - 不使用分隔符分割字符串,然后使用 alpha 索引索引到对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950759/