Я хотел бы уменьшить этот код, используя синтаксис распространения для удаления цикла for, есть идеи?

function shiftChar() {
  let aCharArray = prompt("Enter a word").split("");
  for (let i = 0; i < aCharArray.length; i++) {
    aCharArray[i] = String.fromCharCode(aCharArray[i].charCodeAt(0) + 1);
  }
  alert(aCharArray);
}

Это не работает

function shiftChar() {
  let aCharArray = prompt("Enter a word").split("");
  aCharArray = String.fromCharCode(...aCharArray.charCodeAt(0) + 1);
  alert(aCharArray);
}
1
Neodark7 27 Фев 2018 в 18:47

3 ответа

Лучший ответ

Для каждого элемента в вашем массиве вы делаете некоторые манипуляции, charCodeAt(0) + 1, поэтому, вероятно, лучше всего использовать map.

map вызывает предоставленную callback функцию один раз для каждого элемента в массиве по порядку и создает новый массив из результатов.

Вы можете использовать синтаксис распространения чтобы обновить содержимое вашей переменной aCharArray из массива.

Синтаксис распространения позволяет расширять итерацию, например выражение массива или строку, в местах с нулевым или большим количеством аргументов.

function shiftChar() {
  let aCharArray = prompt("Enter a word").split("").map(x => x.charCodeAt(0) + 1);
  aCharArray = String.fromCharCode(...aCharArray);
  alert(aCharArray);
}
1
Andrew Bone 27 Фев 2018 в 16:13

Синтаксис распространения (это не оператор!) Не является заменой для циклов, это замена для apply.

Ты можешь сделать

const string = prompt("Enter a word");
const charCodes = [];
for (let i = 0; i < aCharArray.length; i++) {
    aCharCodes[i] = aString.charCodeAt(i) + 1;
}

Хотя и потом используй

String.fromCharCode(...charCodes)

Вместо

String.fromCharCode.apply(String, charCodes)
3
Bergi 27 Фев 2018 в 16:07

Минимизированное решение, не использующее спред:

function shiftChar() {
    alert(
      prompt("Enter a word").split("")
      .map(letter => String.fromCharCode(letter.charCodeAt(0) + 1));
    );
}

(Странное) минимизированное решение с использованием распространения:

function shiftChar() {
    alert(
      [...prompt("Enter a word")].map(letter => ( 
        String.fromCharCode(letter.charCodeAt(0) + 1)
      )
    );
}
1
stukilgore 27 Фев 2018 в 16:20