2013-05-22 133 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:纠正我的第一

回答

相关问题