繁体   English   中英

用Ramda创建对象

[英]Create object with Ramda

我想创建一个类似的函数,将以这种方式使用:

const objectCreator = createObject({
  foo: functionFoo,
  bar: functionBar
})

objectCreator(42) // => { foo: functionFoo(42), bar: functionBar(42) }

因此,想法是从应用于值的一组函数中创建一个对象。 例如,用例是从一个唯一的对象中提取不同的数据,然后将此函数放入管道中。

我可以手动创建这样的功能,但是在Ramda(或类似产品)中是否已经不存在此功能? 我不知道如何命名。

Map可以满足您的大部分需求,但前提是您必须在其中加上代码以输入正确的值。例如:

const createObject = specification => value => R.map(f => f(value), specification);

const objectCreator = createObject({
  foo: val => val * 2,
  bar: val => val + 1,
});

let result = objectCreator(42); // { foo: 84, bar: 43 }

或者,如果您希望将其咖喱处理(因此您可以同时或分别传入规范和值):

const createObject = R.curry((specification, value) => R.map(f => f(value), specification))

let result = createObject({
  foo: val => val * 2,
  bar: val => val + 1,
}, 42); // { foo: 84, bar: 43 }

编辑:

如果输入的顺序颠倒了(即先输入值,然后指定规格),则将更加简单:

const createObject = value => R.map(f => f(value))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM