javascript - 我如何用 ramda 编写该函数?
问题描述
如何以 ramda 方式创建 addGreeting 函数?
我尝试创建一个函数,但它认为这不是最佳解决方案。
const animal = {};
const addName = R.assoc('name');
const addGreeting = (transformString) => (animal) => {
return R.assoc('greeting', transformString(animal), animal);
};
const createAnimal =
R.pipe(
addName('Igor'),
addGreeting(animal => `Hello ${animal.name}`),
);
createAnimal(animal);
我希望用 ramda 编写 addGreeting 函数。
UPD:我的解决方案
const addName = R.assoc('name');
const addGreeting =
(transformString) =>
R.converge(
R.merge,
[
R.applySpec({
greeting: transformString
}),
R.defaultTo({})
]
)
const createAnimal =
R.pipe(
addName('Igor'),
addGreeting(animal => `Hello ${animal.name}`),
);
createAnimal({});
解决方案
您可以使用R.curry
创建addGreeting
和R.applySpec
创建动物创建功能:
const { curry, applySpec, identity } = R
const addGreeting = curry((transformString, name) => transformString(name));
const createAnimal = applySpec({
name: identity,
greeting: addGreeting(name => `Hello ${name}`)
})
console.log(createAnimal('Igor'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
推荐阅读
- angular - 如何调用 Angular 8 中表内的表?
- pine-script - 2 在 Renko 图表上带有箭头的 EMA
- javascript - 如何根据不同的键将 JSON 数组重新格式化为另一种格式“分组”
- python - 遇到 python 语法问题,尤其是在 if 检查时
- c# - 有没有更好的方法来使用 [FromUri] 处理默认查询参数?
- python - mypy 类型检查在后面的 `elif` 中间接声明的变量
- php - 将时间范围分成几个小时?
- amazon-web-services - 为什么 AWS 提供商的 OpenShift 安装程序无法连接到 Kubernetes API?
- java - 构建 Apache Ignite 源时出错
- c# - 非授权自定义页面不起作用