Вы можете использовать R.applySpe c для создания объекта с производным свойством. Чтобы объединить его с исходным объектом, используйте R.chain и R.merge (я использовал R.mergeLeft, чтобы сделать его последним свойством).
Применение R.chain к функциям (chain(f, g)(x)
) - это эквивалент f(g(x), x)
. В этом случае x
- это исходный объект, g
- это R.applySpe c (создать объект из x
), а f
- это R.mergeLeft (mergeLeft g(x)
и x
).
const { chain, mergeLeft, applySpec } = R
const getDescription = ({ name, age }) => `${name} is ${age} years old`
const fn = chain(mergeLeft, applySpec({
description: getDescription,
}))
const result = fn({
name: "bob",
age: 24
})
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js"></script>
Без Ramda вы можете получить тот же результат, используя расширение объекта, чтобы включить исходные свойства объекта:
const getDescription = ({ name, age }) => `${name} is ${age} years old`
const fn = o => ({
...o,
description: getDescription(o),
});
const result = fn({
name: "bob",
age: 24
})
console.log(result)