根据 Javascript 中两个对象属性的总和对列表进行排序

Sort list based on sum of two object properties in Javascript

我有这些对象的列表:

var alice = {
  name: 'Alice',
  a: 2,
  b: 8
};
var bob = {
  name: 'Bob',
  a: 4,
  b: 5
};
var clara = {
  name: 'Clara',
  a: 1,
  b: 22
};

我想根据 ab 属性的总和对它们进行升序或降序排序(作为参数传递),即对于降序情况,列表必须按以下顺序排序: clara(总计:23)、alice(总计:10)、bob(总计:9)

在 javascript 中最好的方法是什么?使用 Ramda.js 的解决方案是 preferable/acceptable.

谢谢

检查纯 js 和 Ramda.js here

中的解决方案

var alice = {
  name: 'Alice',
  a: 2,
  b: 8
};
var bob = {
  name: 'Bob',
  a: 4,
  b: 5
};
var clara = {
  name: 'Clara',
  a: 1,
  b: 22
};

var array = [alice, bob, clara];

// solution with pure js
var comparingFn = (obj1, obj2) => {
  var sum1 = obj1.a + obj1.b;
  var sum2 = obj2.a + obj2.b;
  return sum2 - sum1;
};

var array1 = array.sort(comparingFn);
console.log(array1);

// combining Ramda.js with comparing function above.
var array2 = R.sort(comparingFn, array);
console.log(array2);

// solution with Ramda.js
var sortFn = R.sortBy(R.compose(R.sum, R.props(['a', 'b'])));
var array3 = R.reverse(sortFn(array));
console.log(array3);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>