Как я могу составить эту функцию с Рамдой? - PullRequest
1 голос
/ 28 марта 2019

Как я могу создать функцию addGreeting в стиле ramda?

Я пытаюсь создать функцию, но мне кажется, что это не лучшее решение.

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

Я ожидаю написать функцию 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({});

1 Ответ

1 голос
/ 28 марта 2019

Вы можете использовать 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>
...