Как сгенерировать массив алфавита в jQuery?

В Ruby я могу сделать ('a'..'z').to_a и получить ['a', 'b', 'c', 'd', ... 'z'].

Предоставляют ли jQuery или Javascript аналогичную конструкцию?


person Cache    schedule 06.07.2014    source источник
comment
Нет, вам нужно создать свой собственный.   -  person cookie monster    schedule 06.07.2014


Ответы (19)


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

function genCharArray(charA, charZ) {
    var a = [], i = charA.charCodeAt(0), j = charZ.charCodeAt(0);
    for (; i <= j; ++i) {
        a.push(String.fromCharCode(i));
    }
    return a;
}
console.log(genCharArray('a', 'z')); // ["a", ..., "z"]

person Paul S.    schedule 06.07.2014
comment
charCodeAt(0) для i и j? - person Cache; 06.07.2014
comment
@f1f5, чтобы получить значение кодировки Unicode для первого символа каждого аргумента. - person Pointy; 06.07.2014
comment
Я думаю, что это способ сделать это. Его также можно сделать универсальным, проверив тип аргументов и вернув соответствующий диапазон, например, числа. - person cookie monster; 06.07.2014
comment
Так что случайно наткнулся на это, но на самом деле при вводе функции, которая возвращает массив символьных литералов, меньше символов, чем у этой функции. См. мой codepen: codepen.io/jarodsmk/pen/NYaaxx - person jarodsmk; 26.03.2018
comment
спасибо, полезная демонстрация для маленьких детей mrswed.github.io/Russian_alphabet_for_color со всеми буквами - person MrSwed; 14.02.2019
comment
Супер работает отлично :) - person Thulasiram; 08.05.2021

Лично я считаю лучшим:

alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');

Кратко, эффективно, разборчиво и просто!

РЕДАКТИРОВАТЬ: я решил, что, поскольку мой ответ получает достаточно внимания, добавить функциональность для выбора определенных диапазонов букв.

function to_a(c1 = 'a', c2 = 'z') {
    a = 'abcdefghijklmnopqrstuvwxyz'.split('');
    return (a.slice(a.indexOf(c1), a.indexOf(c2) + 1)); 
}

console.log(to_a('b', 'h'));

person Michael Longhurst    schedule 31.07.2015
comment
Как бы вы разместили ('m'..'p').to_a, ('A'..'F').to_a или ('1'..'5').to_a? - person Paul S.; 03.09.2015
comment
@ПолС. Я не знаю руби, но я постараюсь портировать его через какое-то время сегодня. - person Michael Longhurst; 02.02.2016
comment
Небольшое дополнение: если вы действительно ленивы, вы можете просто провести пальцем по каждой строке на клавиатуре (qwertyuiop...), а затем использовать sort, чтобы восстановить порядок букв. - person Michael Longhurst; 09.01.2017
comment
Чтобы получить все символы в ЗАГЛАВНОМ РЕГИСТРЕ: const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('').map((c) => c.toUpperCase()); - person sonlexqt; 18.03.2017
comment
Как вы думаете, каков ожидаемый результат to_a('A', 'z');? Или to_a('α', 'ω') @MichaelLonghurst? Также @sonlexqt, если вы заказываете свои операции наоборот, вы экономите много процессорного времени; 'abcdefghijklmnopqrstuvwxyz'.toUpperCase().split('') - person Paul S.; 27.07.2017
comment
одна большая ловушка этого метода заключается в том, что он подвержен опечаткам. И человек, который проверяет этот код, должен визуально пройти через ваши a до z. Если вы выполните цикл от a до z и распечатаете результат, содержащий все символы от a до z, в этой серии из 26 алфавитов не может быть опечатки. - person nonopolarity; 30.08.2017

Краткая версия ES6:

const alphabet = [...'abcdefghijklmnopqrstuvwxyz'];
console.log(alphabet);

person HenningCash    schedule 21.01.2019

new Array( 26 ).fill( 1 ).map( ( _, i ) => String.fromCharCode( 65 + i ) );

Используйте 97 вместо 65, чтобы получить строчные буквы.

person mendezcode    schedule 20.01.2018
comment
можно использовать 'A'.charCodeAt(0) для удаления магического числа (с небольшими затратами на производительность) - person alex; 02.03.2018

Если кто-то пришел сюда в поисках чего-то, что можно жестко закодировать, вот вам:

["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"]

person Bryce Johnson    schedule 13.07.2018
comment
Буквально той же длины, что и нежестко закодированные решения. - person lakesare; 06.01.2019

Используя оператор распространения ES6, вы можете сделать что-то вроде этого:

let alphabet = [...Array(26).keys()].map(i => String.fromCharCode(i + 97));
person Sherwin Ablaña Dapito    schedule 23.07.2018
comment
Используйте 65 вместо 97, чтобы получить заглавные буквы. - person Timo; 28.01.2021

Я видел ответ, который мне понравился выше, который был жестко закодированным списком английских алфавитов, но он был только в нижнем регистре, и мне тоже нужен был верхний регистр, поэтому я решил изменить его на случай, если он понадобится кому-то еще:

const lowerAlph = ["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"];

const upperCaseAlp = ["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"];

person rotimi-best    schedule 03.12.2018
comment
нет, вы сделали блок кода вместо встроенного кода, в котором нет полосы прокрутки, тройной щелчок для выбора строки включает определение вашей переменной, что кому-то может не понадобиться. Нижний регистр уже есть выше, поэтому я поставил верхний регистр ['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'] (скопировано из вашего, и как-то у вас другой стиль кода) - person Valen; 19.05.2019
comment
@Valen Исправлен встроенный код для лучшей читабельности. Спасибо за наблюдение. - person rotimi-best; 19.05.2019

Многие из этих ответов либо используют массив символов, либо String.fromCharCode, я предлагаю немного другой метод, который использует буквы в base36:

[...Array(26)].map((e,i)=>(i+10).toString(36))

Преимуществом этого является чисто кодовый гольф, он использует меньше символов, чем другие.

person Syd Lambert    schedule 07.12.2018
comment
Я не видел этого раньше. Можете ли вы объяснить, почему .toString(36) использует алфавиты. - person rotimi-best; 06.02.2019
comment
@RotimiBest Базовые 10 чисел используют 10 возможных символов (0-9) для представления каждой цифры. Числа с основанием 36 используют числа от 0 до 9 плюс A-Z для представления всех своих цифр. .toString(36) преобразует число с основанием 10 в основание 36. Этот код создает массив чисел 10-35 и преобразует каждое из них в основание 36. 10->A, 11->B ... 35->Z. - person Syd Lambert; 10.02.2019
comment
Вы можете сделать это с заглавными буквами? - person Timo; 28.01.2021
comment
@Timo Добавить .toUpperCase() после toString(36)... - person Heretic Monkey; 29.01.2021

в случае, если вам нужен жестко закодированный array алфавита, но с меньшим набором текста. альтернативное решение того, что упомянуто выше.

var arr = "abcdefghijklmnopqrstuvwxyz".split("");

выведет такой массив

/* ["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"] */
person samehanwar    schedule 18.01.2019
comment
То же, что и этот ответ за несколько лет до этого... - person Heretic Monkey; 29.01.2021

Пытаться

[...Array(26)].map((x,i)=>String.fromCharCode(i + 97))

let alphabet = [...Array(26)].map((x,i)=>String.fromCharCode(i + 97));

console.log(alphabet);

Обновлять

Как вы заметили в комментариях, эта идея уже использовалась в этом ответе (я пропустил это) - но этот ответ короче, так что относитесь это как улучшение размера этого старого ответа

person Kamil Kiełczewski    schedule 21.06.2020

Магия

[...8337503854730415241050377135811259267835n.toString(36)]

// chrome & firefox
let a1 = [...8337503854730415241050377135811259267835n.toString(36)];

console.log(a1);


// version working on all browsers (without using BigInt)
let a2 = [...[37713647386641440,2196679683172530,53605115].map(x=>x.toString(36)).join``];  

console.log(a2);

person Kamil Kiełczewski    schedule 17.12.2020
comment
+1 спасибо. Камиль, хотел бы узнать больше о том, как это работает, потому что это работает. - person Mats de Swart; 26.01.2021
comment
Подсказка к головоломке @MatsdeSwart: сосредоточьтесь на 36 - person Kamil Kiełczewski; 26.01.2021
comment
Тот же вопрос здесь: для Base 36 нет прописных букв, потому что 36 нужно для 26 строчных букв + цифры, верно? - person Timo; 28.01.2021
comment
Подсказки см. в комментариях к этому более раннему ответу. - person Heretic Monkey; 29.01.2021

Чтобы добавить в решение @Sherwin Ablaña Dapito (мне нравятся подсказки в ответах)

  • 65 — начало верхнего алфавита, 26 — количество символов в алфавите.
  • Метод fill() изменяет все элементы массива на статическое значение (1) на месте.
  • map() применяется к каждому элементу, создает новый массив и имеет функцию в качестве аргумента.
  • =› выражение стрелочной функции, может быть записано как function (i){ return i+ 65;}
  • _ на карте: игнорировать параметр (значение-заполнитель, здесь нет значения) и использовать second = index
  • String.fromcharcode говорит само за себя

new Array( 26 ).fill( 1 ).map( ( _, i ) => String.fromCharCode( 65 + i ) );

person Timo    schedule 28.01.2021

Вот быстрый однострочный

Никаких зависимостей!

Array.from(Array(26)).map((e, i) => i + 65).map((x) => String.fromCharCode(x));

console.log(Array.from(Array(26)).map((e, i) => i + 65).map((x) => String.fromCharCode(x)));

person Coder Gautam YT    schedule 14.05.2021

Использование синтаксиса JavaScript Array.from позволяет создать массив и выполнить функцию отображения для каждого из элементов массива. Создайте новый массив длиной 26 и для каждого элемента установите значение, равное строке, полученной из символьного кода индекса текущего элемента плюс магическое число ascii.

const alphabet = Array.from(Array(26), (e, i) => String.fromCharCode(i + 97));

Опять же, 97 можно поменять местами с 65 для прописного алфавита.

Массив также может быть инициализирован значениями с использованием метода ключей объекта, а не с использованием индекса карты.

const alphabet = Array.from(Array(26).keys(), i => String.fromCharCode(i + 97));
person TkrZ    schedule 09.11.2018

const ALPHA = Array.from({ length: 26 }, (_, i) => String.fromCharCode('a'.charCodeAt(0) + i)); // ['a', 'b', ...'z']

Я считаю, что приведенный выше код более идиоматичен. Достаточно короткий, чтобы быть встроенным кодом. Вам не нужно запоминать charCode вашей начальной буквы и настраиваться для извлечения подмножеств алфавита, просто контролируя длину и начальную букву, например

Array.from({ length: 3 }, (_, i) => String.fromCharCode('x'.charCodeAt(0) + i)) // ['x', 'y', 'z]
person elayira    schedule 20.01.2020

Создать список символов с помощью одной строки

const charList = (a,z,d=1)=>(a=a.charCodeAt(),z=z.charCodeAt(),[...Array(Math.floor((z-a)/d)+1)].map((_,i)=>String.fromCharCode(a+i*d)));

console.log("from A to G", charList('A', 'G'));
console.log("from A to Z with step/delta of 2", charList('A', 'Z', 2));
console.log("reverse order from Z to P", charList('Z', 'P', -1));
console.log("from 0 to 5", charList('0', '5', 1));
console.log("from 9 to 5", charList('9', '5', -1));
console.log("from 0 to 8 with step 2", charList('0', '8', 2));
console.log("from α to ω", charList('α', 'ω'));
console.log("Hindi characters from क to ह", charList('क', 'ह'));
console.log("Russian characters from А to Я", charList('А', 'Я'));

For TypeScript
const charList = (p: string, q: string, d = 1) => {
  const a = p.charCodeAt(0),
    z = q.charCodeAt(0);
  return [...Array(Math.floor((z - a) / d) + 1)].map((_, i) =>
    String.fromCharCode(a + i * d)
  );
};
person nkitku    schedule 29.10.2020

Просто для удовольствия, вы можете определить геттер для прототипа массива:

Object.defineProperty(Array.prototype, 'to_a', {
  get: function () {
    const start = this[0].charCodeAt(0);
    const end = this[1].charCodeAt(0);
    return Array.from(Array(end - start + 1).keys()).map(n => String.fromCharCode(start + n));
  }
});

Что позволяет сделать что-то вроде:

['a', 'z'].to_a; // [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", ..., "z" ]
person andlrc    schedule 29.10.2020

Попробуй это

let name = ''

for(let i=0; i<26; i++){
  name+=(i+10).toString(36)
}

console.log(name.split(''))

person Ridwan Ajibola    schedule 19.06.2021

Ни Javascript, ни Jquery ничего подобного не предоставляют. Вы должны создать свой собственный массив.

Вы можете попробовать так:

var alpha = ["a","b","c",....];

или лучше попробуй так:

var index = 97;
$("#parent .number").each(function(i) {
    $(this).html(String.fromCharCode(index++));
});

ДЕМО

person Rahul Tripathi    schedule 06.07.2014
comment
Я действительно думаю, что он, вероятно, хочет чего-то более автоматизированного, чем ввод всего алфавита вручную. Из вопроса ясно, что он уже знает, как создать массив. - person cookie monster; 06.07.2014
comment
@cookiemonster: - Обновил мой ответ демонстрацией! Надеюсь, это поможет ОП! - person Rahul Tripathi; 06.07.2014
comment
Что-то более прямое отношение к вопросу может заключаться в использовании $.map() для создания массива. $.map(Array(26), function(_, i) { return String.fromCharCode(i + 97); }) jsfiddle.net/agKrz/18 - person cookie monster; 06.07.2014
comment
Сообщение @cookie в качестве ответа. Мне это больше всего нравится :) - person Cache; 06.07.2014
comment
@ f1f5: Я думаю, что ответ, опубликованный Полом С., намного лучше. В основном я просто предлагал альтернативу, которая не полагалась на элементы DOM. - person cookie monster; 06.07.2014
comment
второй код кажется даже длиннее, чем просто выписать все буквы, вот так var alpha = "abcdefghijklmnopqrstuvwxyz".split(''); - person King King; 06.07.2014
comment
почему в демо самый последний символ } - фигурная скобка? - person Vladyn; 27.09.2017