根据属性长度对JavaScript对象数组进行排序

3
我有一个 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:纠正了我的第一个错误。
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接