我有这些对象的列表:
var alice = {
name: 'Alice',
a: 2,
b: 8
};
var bob = {
name: 'Bob',
a: 4,
b: 5
};
var clara = {
name: 'Clara',
a: 1,
b: 22
};
我想根据a
和b
属性的总和对它们进行升序或降序排序(作为参数传递),即对于递减的情况,列表必须按此顺序排序:clara(总数:23),爱丽丝(总数:10),鲍勃(总数:9)
在javascript中执行此操作的最佳方式是什么?使用Ramda.js
的解决方案是可取/可接受的。
谢谢
答案 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;