我有一個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:糾正我的第一
意想不到的答案!謝謝 :) – keldar