2016-08-16 54 views
-2

我一直在尋找這一點,並不能完全弄清楚如何字(或只是找不到),我所期待的怎麼辦。我有兩個JavaScript對象數組。一個請求集合中充滿了ID,另一個包含一個基本上是這些ID所代表的字典的數組。我想通過位於字典數組內的description_text對請求數組進行排序。我試圖只在請求數組內存放ID,而不是在每個數組中重複1000次,並且正在尋找最快的方法來完成此操作。您使用ORDERBY數組作爲字典

例子:

 $scope.requests = [ 
        { request_id 1, request_division_id: 1, morefeilds...}, 
        { request_id 2, request_division_id: 3, morefeilds...}, 
        { request_id 3, request_division_id: 1, morefeilds...}, 
        { request_id 4, request_division_id: 2, morefeilds...}, 
        { request_id 5, request_division_id: 4, morefeilds...}]; 
     $scope.divDict = [ 
      {request_division_id: 1, desc_text: 'Sahara Square'}, 
      {request_division_id: 2, desc_text: 'Little Rodentia'}, 
      {request_division_id: 3, desc_text: 'Rainforest District'}, 
      {request_division_id: 4, desc_text: 'Tundratown'},] 

因此,在這種情況下,我需要在此爲了回報排序排序依據:

 $scope.requests = [ 
        { request_id 4, request_division_id: 2, morefeilds...}, 
        { request_id 2, request_division_id: 3, morefeilds...}, 
        { request_id 1, request_division_id: 1, morefeilds...}, 
        { request_id 3, request_division_id: 1, morefeilds...}, 
        { request_id 5, request_division_id: 4, morefeilds...}]; 

由於是根據每個ID的desc_text的字母順序排列。

+0

([通過在JavaScript字符串屬性值排序對象數組]的可能的複製http://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value-in-javascript ) – vlaz

+0

不,這不是重複的問題。我正在比較字典,這個問題已經有了對象數組內的屬性。我試圖避免這種情況。 – ModestMonk

+0

讓我分析一下。我的問題被標記爲脫離主題,因爲我問如何基於另一個數組的順序對數組進行排序。這是主題?感謝plalx花時間解釋它。我甚至放了一個Zootopia的參考,希望不被打擾,這麼多。堆棧溢出社區既友善又粗魯。 – ModestMonk

回答

0

這與排序並無太大差別,就像請求容納了desc_text屬性:不是從數組中的對象解析描述,而是從divDict對象映射中解析它。

$scope.requests = $scope.requests.sort(function (req1, req2) { 
    let desc1 = $scope.divDict[req1.request_id].desc_text, 
     desc2 = $scope.divDict[req2.request_id].desc_text; 

    return desc1 < desc2? -1 : +(desc1 > desc2); 
}); 

編輯:

我沒有仔細閱讀代碼,並預計divDict是一個對象映射,其中鍵將請求ID,但我認爲你還是會得到的想法。

+0

謝謝。不知道爲什麼我不能這樣想。 如果request_id和desc_text可能是動態的或任何一個字段,我將如何去排序? – ModestMonk

+0

我不確定我是否理解你的問題。如果你不知道你想要比較的屬性的名字,那麼你可以做的最好的做法是循環遍歷鍵並比較類似的鍵或類似的東西。 – plalx

+0

所以如果傳遞一個值,讓我們調用它idPassedFromNgClick你的代碼將是scope.divDict [req1.request_id] [idPassedFromNgClick]?另外,你爲什麼引用request_id,不應該是別的,因爲字典沒有這個屬性。 – ModestMonk