2017-08-02 67 views
-3

我有这些对象的列表:排序列表中的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的解决方案是可取的/可接受的。

在这里谢谢大家无论是在纯JS

+1

为什么这么多downvotes? – choasia

+0

好的..我在阅读您的评论前回答。希望我的回答会有所帮助。 – choasia

回答

1

检查解决方案和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>

+1

谢谢,我对最后一个感兴趣,因为我试图用'sortBy' – Kote