'return' не выводит все результаты - PullRequest
0 голосов
/ 19 декабря 2018

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

Когда я вызываю свою функцию, с помощьюэлемент return, консольный журнал создает только первое значение в массиве -> London.

Как мне получить весь массив городов с заглавными буквами для каждой из строк ???

Примечание. Когда я заменяю return на console.log (результат), вызов функции работает гладко, но в консоли сразу после того, как массив вывел результаты с заглавными буквами, тип значения 'undefined' соответствуетна строку 'console.log (capFirstLetter (towns));'

let cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

let capFirstLetter = (list) => {
  for(let i = 0; i < list.length; i++) {
    let input = list[i].toLowerCase();
    let firstLetter = input[0];
    let result = input.replace(firstLetter, firstLetter.toUpperCase());
    return restult;
  }
}

console.log(capFirstLetter(cities));

Примечание: это то, что в консоли заменяет возвращаемый результат на console.log (результат)

London ->script.js:60
Manchester ->script.js:60
Birmingham ->script.js:60
Liverpool->script.js:60
undefined ->script.js:64

script.js.60 соответствует строке консоли.log (result) & script.js.64 соотносится со строкой

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Когда я вызываю свою функцию с элементом return, журнал консоли выдает только первое значение в массиве -> 'London'.

Это происходит потому, что ваш return останавливает итерацию (for) после первого цикла, поэтому result будет содержать только первый город.

Примечание. Когда я заменяю return на console.log (результат),вызов функции работает гладко, но в консоли сразу после того, как массив вывел результаты с заглавными буквами, тип значения 'undefined' соответствует строке console.log (capFirstLetter (towns));

Это происходит потому, что ваша функция ничего не возвращает (в JS это означает, что функция вернет undefined).

Чтобы заставить ее работать, вы можете использовать map:

let cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

let capFirstLetter = list => list.map(city => city.charAt(0).toUpperCase() + city.slice(1).toLowerCase());

console.log(capFirstLetter(cities));
0 голосов
/ 19 декабря 2018

Вы должны использовать .map для преобразования одного массива в другой - вернуть новый элемент массива в обратном вызове. map:

let cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

let capFirstLetter = (list) => {
  return list.map((input) => {
    input = input.toLowerCase();
    let firstLetter = input[0];
    return input.replace(firstLetter, firstLetter.toUpperCase());
    console.log(result);
  });
}

console.log(capFirstLetter(cities));

Или, чтобы быть более кратким, используйте регулярное выражение и функцию замены:

const cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

const capFirstLetter = list => list.map(
  (input) => input.replace(
    /(.)(.*)/g,
    (_, firstLetter, rest) => firstLetter.toUpperCase() + rest.toLowerCase()
  )
);
console.log(capFirstLetter(cities));

В цикле for старого стиля вам потребуется push к новому массиву в конце каждой итерации:

let cities = ['lonDon', 'ManCHESTer', 'BiRmiNGHAM', 'liVERpoOl'];

let capFirstLetter = (list) => {
  const newArr = [];
  for(let i = 0; i < list.length; i++) {
    let input = list[i].toLowerCase();
    let firstLetter = input[0];
    let result = input.replace(firstLetter, firstLetter.toUpperCase());
    newArr.push(result);
  }
  return newArr;
}

console.log(capFirstLetter(cities));
...