根据 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
};
我想根据 a
和 b
属性的总和对它们进行升序或降序排序(作为参数传递),即对于降序情况,列表必须按以下顺序排序: 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>
我有这些对象的列表:
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)、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>