Использование Рамды для накопления суммы значений в объектах - PullRequest
0 голосов
/ 20 января 2020

У меня есть такой объект:

obj = {
'key1': {'prop1': 123,'prop2':345},
'key2': {'prop1': 673,'prop3':642}
}

Я хотел бы получить следующий результат:

result = {'prop1': 796, 'prop2':345, 'prop3':642}

То есть я хочу один объект, который имеет все свойства. У меня есть такая функция:

Object.values(obj).reduce((acc,currentObj) => {
        const props = Object.keys(currentObj);
        props.forEach(prop => {
            if(prop in acc){
                acc[prop] += currentObj[prop]
            } else {
                acc[prop] = currentObj[prop]
            }
        })
        return acc
    }, {})

Я считаю, что это работает нормально, но есть ли способ сделать то же самое с Рамдой JS?

1 Ответ

1 голос
/ 20 января 2020

Простая функция уменьшения сделает это.

const fn = R.pipe(
  R.values,
  R.reduce(R.mergeWith(R.add), {}),
);

//--

const data = {
  key1: { prop1: 123, prop2: 345 },
  key2: { prop1: 673, prop3: 642 },
};


console.log(
  fn(data),
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js" integrity="sha256-xB25ljGZ7K2VXnq087unEnoVhvTosWWtqXB4tAtZmHU=" crossorigin="anonymous"></script>
...