排序陣列我有一個對象:在JS
var Data = [{
item_id:1,
name:'John',
date:1262293200000,
votes:1
}, {
item_id:2,
name:'Nick',
date:1313784000000,
votes:2
},{
item_id:3,
name:'Paul',
date:1299186000000,
votes:-3
}]
我想item_id
,name
,date
和votes
對它進行排序。 Asc和desc。要做到這一點,我使用這個功能:
function dynamicSort(property) {
return function (a,b) {
return (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0; }}
Array.prototype.sortBy = function(property) { return this.sort(dynamicSort(property)) }
Array.prototype.reverseBy = function(property) { return this.reverse(dynamicSort(property)) }
這是排序和逆轉很好,但只有第二次打電話。例如:
videoDataList.reverseBy("user_votes")
結果將是錯誤的,但如果我不sortBy,然後再次reverseBy
這將是正確的排序。 另外,如果我打電話reverseBy
,然後sortBy
排序sortBy
將是正確的。
可以修復嗎?
你錯了。 'dynamicSort(property)'被調用一次,其結果(排序函數)然後作爲參數傳遞給'Array.sort()'。並且每個比較都會調用該函數(只有那個函數)(順便說一句,有'n * log(n)'比較排序)。所以你的優化沒有任何影響。 –
你說得對,我想現在還爲時過早,我想清楚:)我會從我的帖子中刪除這個。 – revers