2015-07-20 156 views
4

我的問題: 我有一個對象的數組,我通過一個對象鍵對ASC DESC進行排序,之後我需要對將按照對象數組排序方式排序的字符串數組進行排序。 例如:如何對一個數組和另一個數組進行排序?

arrayOfObjects = [{name:"john",nuber:6,food:"pizza"}, 
       {name:"david",nuber:2,food:"gulash"}, 
       {name:"margaret",nuber:7,food:"gugi barries"}] 

arrayOfStrings = ['r1','r2','r3'] 

所以在arrayOfObjects每個對象具有它自己的字符串。所以說,約翰有r1,他們都是第一次索引,當我按數字排序約翰第二,並且我希望他的數字也第二(以及大衛和瑪格麗特數字)

我需要重新-arrange的arrayOfStrings以同樣的方式(我不關心它是什麼排序)的arrayOfObjects進行了排序

我的排序功能:

dataArray.sort(dynamicSort(sortBy)); 
function dynamicSort(property) { 
    var sortOrder = 1; 
    if(property[0] === "-") { 
     sortOrder = -1; 
     property = property.substr(1); 
    } 
    return function (a,b) { 
     if(direction=='asc'){ 
      var c = b; 
      b=a; 
      a=c; 
     } 
     var result = (b[property] < a[property]) ? -1 : (b[property]> a[property]) ? 1 : 0; 
     return result * sortOrder; 
    } 
} 
+1

您可以爲要排序的對象添加一個屬性,例如'{name:「john」,r:'r1'...',然後在對數組進行排序時檢索這些值。 – Hacketo

回答

2

我建議你在格式[[object, string], ...]壓縮列表,然後根據排序到元組的第一個元素。之後您可以解壓縮列表。

+0

這是一個好主意,我有一個類似的想法,只是將每個字符串添加到它的原始對象,在key:string處並從那裏讀取它。 雖然我想看看是否有辦法我可以'記住排序改變' – nadiTime

+0

@nadiTime不,我很確定沒有,這是不實際的。我的意思是說你最多隻會做兩次分揀工作*這不是你想要的。只需一次完成 - 無論哪種方式(你的或我的),這只是一個問題,它是否有意義的字符串是否是對象的一部分。 – corazza

+0

你絕對正確,我不想再次對數組進行排序。謝謝 – nadiTime

相關問題