我有一个 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
}
}
}
}
在我的用户界面上,我有一个下拉列表,其中包含该数组中属性的某些值;因此我可能会按以下方式排序:
- “姓名”
- “地址.邮政编码”
- “地址.合同.时间”
但是,目前我的排序功能必须解码有多少“。” 通过拆分它,然后我可以根据 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:纠正了我的第一个