@Romario5891

Задача с использованием каррирования?

Всем привет, мучаюсь уже второй день вот с такой задачкой как в коде ниже. Подскажите как можно ее решить правильно. Спасибо.
Задача:
Вызываем функцию: concat('first')('second')('third')()
Получаем результат: 'firstsecondthird'
Вызываем функцию: concat('first', null)('second')()
Получаем результат: 'firstsecond'
Вызываем функцию: concat('first', '123')('second')('third')()
Получаем результат: 'first123second123third'
Вызываем функцию: concat('some-value')('')('')(null)
Получаем результат: 'some-value'
Вызываем функцию: concat('some-value')(2)
Получаем результат: 'some-value'
Вызываем функцию: concat('some-value')('333')(123n)
Получаем результат: 'some-value333'
  • Вопрос задан
  • 182 просмотра
Решения вопроса 2
@StockholmSyndrome
const concat = (...[arg, sep]) => typeof arg !== 'string' ? '' : (newArg) => typeof newArg === 'string' ? concat(arg + (sep || '') + newArg, sep) : arg;
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
const concat = (str, delim = '', strs = []) => (typeof str === 'string')
  ? (str1) => concat(str1, delim === null ? '' : delim, [...strs, str])
  : strs.join(delim);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Aetae
@Aetae Куратор тега JavaScript
Тлен
const concat = (argument, separator) => {
  if(typeof seprator !== 'string')
    seprator = '';  

  const result = [];
  const innerConcat = argument => {
    if(typeof argument !== 'string')
      return result.join(separator);

    result.push(argument);
    return innerConcat;
  }

  return innerConcat(argument);
};
Ответ написан
Комментировать
Alexandroppolus
@Alexandroppolus
кодир
const c = (v, acc) => typeof v === 'string' ? (v1) => c(v1, acc + v) : acc;
const concat = v => c(v, '');
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы