Разделить строку без разделителя, а затем индексировать в объект, используя альфа-индексирование. - PullRequest
1 голос
/ 21 января 2012

Я хочу разделить строку без разделителя (эффективно разделив ее по каждому символу), а затем индексировать в объект в алфавитном порядке.Я хочу, чтобы он использовал 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 символов)

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Вот один из способов сделать это:

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');
            }
        }
    }
}
1 голос
/ 21 января 2012

Вы говорите, что хотите использовать 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/

...