Я хочу построить массив ['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(' ');
Интересно, существует ли более "программный" подход.
Я хочу построить массив ['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(' ');
Интересно, существует ли более "программный" подход.
Ну, это можно немного сократить:
'abcdefghijklmnopqrstuvwxyz'.split('');
Но позвольте мне думать по-другому...
EDIT... нет, я не думаю, что существует более быстрый способ, чем
Почему не просто литерал?
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'
];
Мне пришлось протестировать, и это намного быстрее, чем разбиение строки: jsperf.com/arraycreation
Интересно, есть ли более "программный" подход?
Вы можете сделать это с помощью кода...
var chars = [];
for (var i = 97; i < 123; i++) {
chars.push(String.fromCharCode(i));
}
Вы можете взломать функцию типа диапазона, чтобы сделать это. Это, по крайней мере, инкапсулирует уродство генерации этого встроенного...
// 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;
}
Однако, я согласен, что literal Array
- лучшее решение...
Array
. Нет необходимости логически проходить через код.Array
с кодом. Алфавит никогда (редко?) Не изменится.alphabet = [];
for (var i = 'a'.charCodeAt(0); i < 'z'.charCodeAt(0); i++)
{
alphabet.push(String.fromCharCode(i));
}
console.log(alphabet);
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 лет.
Вы можете использовать String.fromCharCode() и цикл для его создания. например, 97 trought 122 будут делать нужные вам персонажи.
s = 'a';
while (!/z/.test(s)) s += String.fromCharCode(s.charCodeAt(s.length-1)+1)
document.write(s.split(''));
Рекурсивный;
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;
}