Преобразовать массив с 8-битным значением в строку с символом (без кода)

Я нашел элегантный код для преобразования ArrayBuffer в charCode.

Но мне нужен char, а не charCode.

function ab2s (buf) {
  var view = new Uint8Array (buf);
  return Array.prototype.join.call (view, ",");
}

Я старался

return Array.prototype.join.call (view, function() {String.fromCharCode(this)});

Но это дерьмо.

Спасибо за ответы.

1 ответ

Решение
return Array.prototype.join.call (view, function() {String.fromCharCode(this)});

Но это дерьмо.

Очевидно, поскольку Array::join не принимает обратный вызов для преобразования каждого элемента, а только разделитель, с помощью которого элементы должны быть соединены.

Вместо этого, чтобы преобразовать каждый элемент перед их соединением, вы должны использовать Array:: map:

return Array.prototype.map.call(view, function(charcode) {
    return String.fromCharCode(charcode);
}).join('');

Тем не менее, существует гораздо более простое решение, так как String.fromCharCode принимает несколько аргументов:

return String.fromCharCode.apply(String, view);
Другие вопросы по тегам