@Vyacheslav_Frein

Почему аргумент arr равен undefined?

Насколько я понимаю при первом вызове reduce, значением параметра arr должен быть второй параметр reduce. Но почему то он равен undefind.

function camelize(str) {
    array = str.split('-');
    console.log(array);
    let filteredArray = array.reduce((arr, item) => {
        console.log(arr);
        if(item == ''){
            return;
        }

    }, []);
}

camelize('-webkit-transition')
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
При первом вызове всё в порядке, на вход пустой массив.
Но надо же вернуть что-то для следующей итерации.
Сейчас при втором вызове на входе arr === undefined

spoiler
В задаче reduce, наверное, не нужен вовсе.
Я бы разбил по дефису на слова в массив: 'aBc-dEf-GH' => ['aBc', 'dEf', 'GH']
Метод массива map() пробежит по каждому элементу, возвращая новый.
Каждое слово составить заново: первую букву сделать большой, остальные маленькими: 'dEf' => 'Def'
Исключение для самого первого — там все маленькие должны быть: 'aBc' => 'abc'
function camelize(str) {
  return str.split('-')
    .map((word, i) => i ? word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase() : word.toLowerCase())
    .join('');
}
Ответ написан
@asmodeus13th
Тебе нужно обязательно возвращать массив, иначе будет автоматически возвращаться undefined.
Рекомендую посмотреть этот видос.
let filteredArray = array.reduce((arr, item) => {
  console.log(arr);
  if(item == ''){
    return;
  }
  return arr  // надо добавить эту строку
}, []);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы