我有一个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