Могу ли я передать массив в fromCharCode - PullRequest
21 голосов
/ 30 марта 2012

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

во фрагменте, почему это не работает?

array = [72,69,76,76,79];
document.write(String.fromCharCode(array));

Я собираю ключевые события в массиве и хочу иметь возможность записывать их как символы в ответ на запрос.И хотя это работает:

document.write(String.fromCharCode(72,69,76,76,79));

Я не могу заставить его работать, когда передаю его в виде массива.Я также попытался сначала преобразовать массив toString (), а также array.join (",");создать список через запятую ... пока ничего.Есть идеи?Есть ли лучший способ преобразовать значения, которые я собираю в своем массиве, в символы?

Ответы [ 7 ]

35 голосов
/ 30 марта 2012

Вы можете использовать метод apply() функции ...

document.write(String.fromCharCode.apply(null, array));

jsFiddle .

ES6 может использовать оператор распространения ...

document.write(String.fromCharCode(...array));

Вы также можете использовать метод массива reduce(), но старые IE не поддерживают его. Вы можете shim , но метод apply() лучше поддерживается.

document.write(array.reduce(function(str, charIndex) {
    return str += String.fromCharCode(charIndex);
}, ''));​

jsFiddle .

9 голосов
/ 30 марта 2012

Да, вы можете использовать apply () для вызова функции, которой массив передал в качестве аргументов:

array = [72,69,76,76,79];
document.write(String.fromCharCode.apply(String, array));
3 голосов
/ 30 марта 2012

Если вы используете .apply() для вызова функции fromCharCode(), вы можете передать ей массив, который будет преобразован в аргументы для функции следующим образом:

document.write(String.fromCharCode.apply(this, array));

Вы можете увидеть это здесь: http://jsfiddle.net/jfriend00/pfLLZ/

1 голос
/ 30 марта 2012

Метод более предназначен для использования следующим образом:

document.write(String.fromCharCode(72,69,76,76,79));

Вы передаете массив, когда метод ожидает несколько параметров в виде списка.

0 голосов
/ 14 января 2016

Вот функция:

var unCharCode = function(x) {
  return this["eval"]("String['fromCharCode'](" + x + ")");
};

document.write(unCharCode([ 119, 119, 119, 46, 87, 72, 65, 75, 46, 99, 111, 109 ]));

document.write("<hr>");

document.write(unCharCode("119,119,119,46,87,72,65,75,46,99,111,109"));
0 голосов
/ 14 января 2016

Вот два способа сделать это:

var arr=[119,119,119,46,87,72,65,75,46,99,111,109];
document.write(eval('String.fromCharCode('+arr+')'));

document.write('<hr>');

var arr='119,119,119,46,87,72,65,75,46,99,111,109';
document.write(eval('String.fromCharCode('+arr+')'));
0 голосов
/ 30 марта 2012

Возможно, вам придется использовать цикл следующим образом

for(var i = 0; i < array.length; i++)
       document.write(String.fromCharCode(array[i]));
}
...