2015-02-24 42 views
2

我有一個對象數組,其元素使用ng-repeat從AngularJS中顯示。每個對象都有一個priority_int整數值,我知道我可以排序的陣列與降序排列:如何將數組排序爲Javascript中添加的項目?

array.sort(function(a,b){ 
    return b.priority_int - a.priority_int; 
} 

目前,我將一切交給陣列,按降序排列的priority_int排序之前,然後用ng-repeat顯示。

出於好奇,每當我將對象推入數組時,該如何排序?

+1

創建一個函數,它的值,然後推動它和排序,並使用你的推? – 2015-02-24 21:19:28

+0

你可以用'ng-repeat'進行排序 – 2015-02-24 21:22:36

回答

3

每次添加元素時使用數組都會導致嚴重的運行時損失,尤其是因爲某些默認的array.sort實現對近似排序的數組具有O(n^2)運行時。

而是使用二進制搜索將新元素插入排序數組中的正確位置。

入住此相關答案更多的幫助:

Efficient way to insert a number into a sorted array of numbers?

0

要做到這一點最簡單的方法是首先找到其中的新元素應該放在索引。然後,你應該在那裏添加元素。

var addToReverseSortedArray = function (arr, item) { 
    // our function to find the index of an element 
    // (or where it should be placed) 
    var search = function (a, i) { 
     var low = 0, high = a.length - 1; 
     while (low <= high) { 
      var mid = (low + high) >> 1; 
      if (a[mid] > i) low = mid + 1; 
      else if (a[mid] < i) high = mid - 1; 
      else return mid; 
     } 
     return low; 
    } 
    // Array.splice can actually splice 0 items 
    // here, we splice 0 items at index search(arr, item) 
    // and add `item` 
    arr.splice(search(arr, item), 0, item); 
    return arr; 
} 

請注意,上面的函數依賴於逆序排列的數組。

例子:

addToReverseSortedArray([5,4,3], 6); // [6,5,4,3] 
addToReverseSortedArray([1,0,0,0], 10); // [10,1,0,0,0] 
相關問題