Строка, содержащая все символы ascii
Я хочу создать строку в JavaScript, которая содержит все символы ascii. Как я могу это сделать?
Ответы
Ответ 1
Мой javascript немного ржавый, но что-то вроде этого:
s = '';
for( var i = 32; i <= 126; i++ )
{
s += String.fromCharCode( i );
}
Не уверен, что диапазон правильный.
Edit:
Кажется, тогда это должно быть от 32 до 127. Скорректированная.
Изменить 2:
Поскольку char 127 также не является печатным символом, нам придется сузить его до 32 <= c <= 126, вместо 32 <= c <= 127.
Ответ 2
var s = ' !"#$%&\'()*+,-./0123456789:;<=>[email protected][\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
Ответ 3
Просто закодируйте коды символов и преобразуйте их в символ:
var s = '';
for (var i=32; i<=127;i++) s += String.fromCharCode(i);
Ответ 4
Просто хотел поставить это здесь для справки. (генерируется около 13/100 до 26/100 мс на моем компьютере).
var allAsciiPrintables = JSON.stringify((Array.from(Array(126 + 32).keys()).slice(32).map((item) => {
return String.fromCharCode(item);
})).join(''));
Разобрать:
var allAsciiPrintables = (function() {
/* ArrayIterator */
var result = Array(126 + 32).keys();
/* [0, 126 + 32] */
result = Array.from(result);
/* [32, 126 + 32] */
result = result.slice(32);
/* transform each item from Number to its ASCII as String. */
result = result.map((item) => {
return String.fromCharCode(item);
});
/* convert from array of each string[1] to a single string */
result = result.join('');
/* create an escaped string so you can replace this code with the string
to avoid having to calculate this on each time the program runs */
result = JSON.stringify(result);
/* return the string */
return result;
})();
Наиболее эффективное решение (если вы хотите генерировать весь набор при каждом запуске скрипта, вероятно) (для генерации на моем компьютере требуется около 3/100-35/100 миллисекунды).
var allAsciiPrintables = (() => {
var result = new Array(126-32);
for (var i = 32; i <= 126; ++i) {
result[i - 32] = (String.fromCharCode(i));
}
return JSON.stringify(result.join(''));
})();
странно, что это всего лишь в 3-10 раз медленнее, чем непосредственное присвоение строкового литерала (с обратными галочками, чтобы сказать javascript, чтобы избежать большинства разбора обратной косой черты).
var x;
var t;
t = performance.now();
x = '!\"#$%&\'()*+,-./0123456789:;<=>[email protected][\\]^_'abcdefghijklmnopqrstuvwxyz{|}~';
t = performance.now() - t;
console.log(t);
,
Ответ 5
Не делая несколько добавлений:
var s = Array.apply(null, Array(127-32))
.map(function(x,i) {
return String.fromCharCode(i+32);
}).join("");
Ответ 6
Вот версия в coffeescript
require 'fluentnode'
all_Ascii = ->
(String.fromCharCode(c) for c in [0..255])
describe 'all Ascii', ->
it 'all_Ascii', ->
all_Ascii.assert_Is_Function()
all_Ascii().assert_Size_Is 256
all_Ascii()[0x41].assert_Is 'A'
all_Ascii()[66 ].assert_Is 'B'
all_Ascii()[50 ].assert_Is '2'
all_Ascii()[150 ].assert_Is String.fromCharCode(150)