基于任意长度属性对JavaScript对象数组进行排序

基于任意长度属性对JavaScript对象数组进行排序,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,我有一个JavaScript排序数组函数,它接受我提供的一个字符串,它是我要排序的属性的名称,它根据该属性名称对数组进行排序 因此: 在我的用户界面上,我有一个下拉列表,其中列出了该数组中属性的某些值;因此,我可能会这样分类: “姓名” “地址.邮政编码” “地址、合同、时间” 但是,目前我的排序函数必须通过拆分来解码有多少个“.”,然后我可以根据arr[prop1]或arr[prop1][prop2]或arr[prop1][prop2][prop3]进行排序,这意味着我必须明确说明我所指的

我有一个JavaScript排序数组函数,它接受我提供的一个字符串,它是我要排序的属性的名称,它根据该属性名称对数组进行排序

因此:

在我的用户界面上,我有一个下拉列表,其中列出了该数组中属性的某些值;因此,我可能会这样分类:

  • “姓名”
  • “地址.邮政编码”
  • “地址、合同、时间”
但是,目前我的排序函数必须通过拆分来解码有多少个“.”,然后我可以根据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:更正了我的第一次使用
cmp
from和
ref
from;)


妙极了!谢谢:)
{
    {
        "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
            }
        }
    }
}
sort(myArray, "Name")
sort(myArray, "Address.PostCode")
sort(myArray, "Address.Contract.Hours")
sort(myArray, "Address.Contract.ExampleProp1")
sort(myArray, "Address.Contract.ExampleProp1.ExampleProp2.ExampleProp3")
prop = "Address.Contract.ExampleProp1"
ary.sort(function(a, b) {
    return cmp(ref(a, prop), ref(b, prop))
})