Строка, содержащая все символы ascii - PullRequest
18 голосов
/ 15 марта 2010

Я хочу создать в JavaScript строку, содержащую все символы ascii. Как я могу это сделать?

Ответы [ 6 ]

65 голосов
/ 01 апреля 2013
var s = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
20 голосов
/ 15 марта 2010

Мой javascript немного ржавый, но что-то вроде этого:

s = '';
for( var i = 32; i <= 126; i++ )
{
    s += String.fromCharCode( i );
}

Не уверен, что диапазон правильный.

Edit:
Кажется, это должно быть от 32 до 127 тогда. Скорректированная.

Редактировать 2:
Поскольку символ 127 не является печатным символом, нам придется сузить его до 32 <= c <= 126 вместо 32 <= c <= 127. </p>

3 голосов
/ 15 марта 2010

Просто зациклите коды символов и преобразуйте каждый в символ:

var s = '';
for (var i=32; i<=127;i++) s += String.fromCharCode(i);
2 голосов
/ 29 августа 2016

Просто хотел поставить это здесь для справки.(генерируется около 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:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
t = performance.now() - t;
console.log(t);

.

0 голосов
/ 07 января 2019

Не делая несколько добавлений:

var s = Array.apply(null, Array(127-32))
  .map(function(x,i) {
    return String.fromCharCode(i+32);
  }).join("");
0 голосов
/ 24 ноября 2015

Вот версия в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...