Хороший способ построения ['a', 'b', 'c', 'd',..., 'z']

Я хочу построить массив ['a', 'b', 'c', 'd', ..., 'z'] чистым способом. Лучшее, что я нашел, -

'a b c d e f g h i j k l m n o p q r s t u v w x y z'.split(' ');

Интересно, существует ли более "программный" подход.

Ответ 1

Ну, это можно немного сократить:

'abcdefghijklmnopqrstuvwxyz'.split('');

Но позвольте мне думать по-другому...

EDIT... нет, я не думаю, что существует более быстрый способ, чем

Ответ 2

Почему не просто литерал?

var chars = [
  'a','b','c','d','e','f','g','h','i','j','k','l','m',
  'n','o','p','q','r','s','t','u','v','w','x','y','z'
];

Edit:

Мне пришлось протестировать, и это намного быстрее, чем разбиение строки: jsperf.com/arraycreation

Ответ 3

Интересно, есть ли более "программный" подход?

Вы можете сделать это с помощью кода...

var chars = [];
for (var i = 97; i < 123; i++) {
    chars.push(String.fromCharCode(i));
}

jsFiddle.

Вы можете взломать функцию типа диапазона, чтобы сделать это. Это, по крайней мере, инкапсулирует уродство генерации этого встроенного...

// Create a range of letters.
var createAlphaRange = function(start, end) {
    var chars = [],
        startOrdinal = start.charCodeAt(0),
        endOrdinal = end.charCodeAt(0);

    for (startOrdinal; startOrdinal <= endOrdinal; startOrdinal++) {
        chars.push(String.fromCharCode(startOrdinal));
    }

    return chars;

}

jsFiddle.

Однако, я согласен, что literal Array - лучшее решение...

  • Кратко и точно.
  • Вы можете сразу понять, что содержит Array. Нет необходимости логически проходить через код.
  • Вы всегда можете избежать создания того же Array с кодом. Алфавит никогда (редко?) Не изменится.
  • Это лишний кусок кода, который может беспокоиться о том, что может содержать ошибки и т.д. для тривиальной генерации символов.

Ответ 4

alphabet = [];
for (var i = 'a'.charCodeAt(0); i < 'z'.charCodeAt(0); i++)
{
    alphabet.push(String.fromCharCode(i));
}

console.log(alphabet);

Ответ 5

JavaScript содержит средства Array и генераторы, добавленные в версии 1.7 (2006). Похоже, что они также были добавлены в ECMAScript. JScript (IE), похоже, не поддерживает их.

Массивные решения позволяют получить сжатое решение.

var letters = [String.fromCharCode(i) for each (i in range(97, 123))]

Где range как определено здесь.

Примечание. Помните, что в настоящее время для использования этого в Firefox вам нужно указать нужную версию:

<script type="application/javascript;version=1.7" src="foo.js">

Вернитесь к этому сообщению через 10 лет.

Ответ 6

Вы можете использовать String.fromCharCode() и цикл для его создания. например, 97 trought 122 будут делать нужные вам персонажи.

Ответ 8

Рекурсивный;

String.prototype.through = function(z) {
 if (this.charCodeAt(this.length-1) == z.charCodeAt(0)) return this;
    return this + String.fromCharCode(this.charCodeAt(0)+1).through(z)   
}

document.write("a".through("z").split(''))

Конечно, это не рекомендуется и не быстро.

Или с помощью другого метода through

String.prototype.through = function(z) {
 var start = curr = (''+this).charCodeAt(0);
 var end = z.charCodeAt(0)
 var increment = (start < end) ? 1 : -1;
 var ret = ''+this
 while (curr != end) {
     curr += increment;
     ret += String.fromCharCode(curr);
 }
 return ret;
}