2013-05-22 130 views
3

我有一個JavaScript排序數組函數,它接受一個字符串,我提供它,這是我想排序的屬性的名稱,它通過該屬性名稱排序我的數組。基於任意長度的屬性排序JavaScript對象數組

這樣:

function sortProp(myArr, prop) { 
    return myArray.sort(function (a, b) { 
     return a[prop] < b[prop]; 
    } 
} 

我想什麼,對這種功能繼續服用此字符串,但可以把它讀作屬性來排序的任意長度;這可能是在下面的示例解釋更容易:

我有對象的JavaScript的陣列,其採用以下結構(這僅僅是顯示多級嵌套我有一個例子):

{ 
    { 
     "Name" : "John Smith" 
     "Address" : { 
      "Line 1" : "123 Some Street" 
      "Line 2" : "Some Neighbourhood" 
      "Town" : "Some Town" 
      "PostCode" : "ST1 1ST" 
      "Contract" : { 
       "Name" : "CON1" 
       "Hours" : 24 
      } 
     } 
    }, 

    { 
     "Name" : "Mary Jones" 
     "Address" : { 
      "Line 1" : "321 Some Other Street" 
      "Line 2" : "Some Other Neighbourhood" 
      "Town" : "Some Other Town" 
      "PostCode" : "SO1 1OS" 
      "Contract" : { 
       "Name" : "CON2" 
       "Hours" : 48 
      } 
     } 
    } 
} 

在我的用戶界面,我有一個下拉列表中的屬性在這個數組中的某些值;因此,我可能有排序:

  • 「名稱」
  • 「Address.PostCode」
  • 「Address.Contract.Hours」

然而,此刻我的排序函數必須解碼多少'。'那麼我可以根據arr [prop1]或arr [prop1] [prop2]或arr [prop1] [prop2] [prop3]進行排序,這意味着我必須明確指出我指的數組深度至。

理想情況下,我想要的是提供它的字符串,然後功能解決它所需要的嵌套級別 - 但我不知道該怎麼做,因爲我不知道任何其他除了顯式聲明數組索引之外。

是否有東西,可以達到,所以我可以通過我的排序功能,下面的一些,並且它的作品了所需的嵌套有沒有我寫硬編碼陣列深處,如:

sort(myArray, "Name") 
sort(myArray, "Address.PostCode") 
sort(myArray, "Address.Contract.Hours") 
sort(myArray, "Address.Contract.ExampleProp1") 
sort(myArray, "Address.Contract.ExampleProp1.ExampleProp2.ExampleProp3") 

因此,我可以給它提供任何大小的財產長度的參數,並且它可以計算出來。

希望有道理:)謝謝。

編輯1:改變了標題

編輯2:糾正我的第一

回答

相關問題