Создать объект с Рамдой - PullRequest
0 голосов
/ 28 июня 2018

Я хотел бы создать аналогичную функцию, которая будет использоваться следующим образом:

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

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

Таким образом, идея состоит в том, чтобы создать объект из набора функций, примененных к значению. Пример использования, например, для извлечения различных данных из уникального объекта и помещения этой функции в конвейер.

Я мог бы создать такую ​​функцию вручную, но не существует ли уже существующей функции в Рамде (или подобной) для этого? Я не могу понять, как это можно назвать.

1 Ответ

0 голосов
/ 28 июня 2018

Карта делает большую часть того, что вам нужно, при условии, что вы окружаете ее кодом для ввода правильных значений. Например:

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))
...