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

时间:2017-08-02 13:01:23

标签: javascript sorting ramda.js

我有这些对象的列表:

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),爱丽丝(总数:10),鲍勃(总数:9)

在javascript中执行此操作的最佳方式是什么?使用Ramda.js的解决方案是可取/可接受的。

谢谢

1 个答案:

答案 0 :(得分:1)

检查纯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>
&#13;
&#13;
&#13;