2017-08-02 30 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