Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.03.2021, 11:44
Интересующийся
Отправить личное сообщение для OlesiaBOM Посмотреть профиль Найти все сообщения от OlesiaBOM
 
Регистрация: 05.11.2020
Сообщений: 22

Вызов функции.
Как записать функцию pipe, чтобы каждая из функций передавала выходные данные другой функции в последовательности?

function isFunction(functionToCheck) {
return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}

const pipe = (value, ...funcs) => {
	
};

const replaceUnderscoreWithSpace = (value) => value.replace(/_/g, ' ');
const capitalize = (value) =>
value
	.split(' ')
        .map((val) => val.charAt(0).toUpperCase() + val.slice(1))
        .join(' ');
const appendGreeting = (value) => `Hello, ${value}!`;

const error = pipe('john_doe', replaceUnderscoreWithSpace, capitalize, '');

alert(error); // Provided argument at position 2 is not a function!

const result = pipe('john_doe', replaceUnderscoreWithSpace, capitalize, appendGreeting);

alert(result); // Hello, John Doe!
Ответить с цитированием
  #2 (permalink)  
Старый 28.03.2021, 12:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

OlesiaBOM,
function isFunction(functionToCheck) {
return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}

const pipe = (value, ...funcs) => {
   let [fun, ...f] = funcs, isFun = isFunction(fun);
   value = isFun ? fun(value) : 'error';
   return isFun && f.length ? pipe(value, ...f) : value
};

const replaceUnderscoreWithSpace = (value) => value.replace(/_/g, ' ');
const capitalize = (value) =>
value
    .split(' ')
        .map((val) => val.charAt(0).toUpperCase() + val.slice(1))
        .join(' ');
const appendGreeting = (value) => `Hello, ${value}!`;

const error = pipe('john_doe', replaceUnderscoreWithSpace, capitalize, '');

alert(error); // Provided argument at position 2 is not a function!

const result = pipe('john_doe', replaceUnderscoreWithSpace, capitalize, appendGreeting);

alert(result); // Hello, John Doe!
Ответить с цитированием
  #3 (permalink)  
Старый 28.03.2021, 13:34
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

А так не проще?
const pipe = (value, ...funcs) => {
	try {
		return funcs.reduce ((v, f) => f(v), value)
	} catch (err) {
		return err;
	}
};
 
const replaceUnderscoreWithSpace = (value) => value.replace(/_/g, ' ');
const capitalize = (value) =>
value
    .split(' ')
        .map((val) => val.charAt(0).toUpperCase() + val.slice(1))
        .join(' ');
const appendGreeting = (value) => `Hello, ${value}!`;
 
const error = pipe('john_doe', replaceUnderscoreWithSpace, capitalize, '');
 
alert(error); // Provided argument at position 2 is not a function!
 
const result = pipe('john_doe', replaceUnderscoreWithSpace, capitalize, appendGreeting);
 
alert(result); // Hello, John Doe!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов вложенной функции объявленной без ключевого слова var ytil Общие вопросы Javascript 6 15.10.2018 22:53
Вызов функции, отмена старой функции. Таймер finlolo Events/DOM/Window 10 15.08.2018 21:18
Динамическое подключение JS и вызов функции Paqwerty Events/DOM/Window 1 25.04.2017 16:33
Вызов функции страницы из расширения chrome nontxt Events/DOM/Window 0 09.02.2015 10:42
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 15:19