如何解决将具有逻辑和ui的函数转换为高阶函数
我正在尝试提高我的JavaScript技能。我正在学习可组合性和功能模式,我完全迷失了。
我有两个函数:一个映射一个数组,另一个从上一个函数中调用以生成标记。
const names = ['peter','paul','patrice']
const namesMarkup = name => {
return `<p>${name}</p>`
}
const showNames = listOfNames => {
return listOfNames.map(el => {
return namesMarkup(el)
})
}
showNames(names)
我一直在阅读关于HOF的信息,从技术上讲,它们是将函数作为参数和/或返回函数的函数。 我该如何组合这些功能以获得HOF?
我看过像
这样的基本示例const square = num => num * num
const plus10 = (num,callback) => {
return callback(num) + 10
}
console.log(addTwo(7,square))
但是我无法确定前面的示例和列表。 我将不胜感激,因为我研究的越多,就会感到困惑。
解决方法
您的错误是假定一个showNames
的数组。永远不要这样做。始终实现最简单的函数版本。在FP阵列中是一种计算效果。不要实现默认的有效功能
const nameMarkup = name => {
return `<p>${name}</p>`;
}
const nameMarkup2 = name => {
return `<p>${name.toUpperCase()}!</p>`;
}
const showName = f => name => {
const r = f(name);
/* do something useful with r */
return r;
}
const names = ['peter','paul','patrice']
console.log(
showName(nameMarkup) ("peter"));
// lift the HOF if you want to process a non-deterministic number of names:
console.log(
names.map(showName(nameMarkup2)));
现在交换标记仅意味着传递另一个函数参数。您的showName
比较笼统,因为HOF可以让您传递部分功能。
如果我们放弃了数组要求,那么您的showNames
将不再有用。不过,它仍然说明了基本思想。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。