繁体   English   中英

在JavaScript中访问嵌套属性

[英]Accessing nested properties in JavaScript

我正在编写一些代码来对表中的列进行排序。 (该表通过KnockOutJS绑定到数据)。 为了帮助在不同的表和页面中自动执行此过程,我创建了一个具有列名的对象,以及列所绑定的对象的sortPropertyName。

self.headers = [
    { title: 'ID', sortPropertyName: 'organizationId' },
    { title: 'Name', sortPropertyName: 'name' },
    { title: 'City', sortPropertyName: '[address].city' },
    { title: 'State', sortPropertyName: '[address].state' },
    { title: 'Phone Number', sortPropertyName: 'phone' }
];

那个sort属性被传递给一个sort例程,然后它应该只根据sortProperty对数据进行排序:

self.sort = function (header, event) {
    var prop = header.sortPropertyName;
    self.people.sort(function (a, b) {
        return a[prop] < b[prop] ? -1 : a[prop] > b[prop] ? 1 : a[prop] == b[prop] ? 0 : 0;
    });
};

(完全归功于Ryan Rahlf http://ryanrahlf.com/sorting-tables-by-column-header-with-knockout-js-part-2/

这适用于属于“根”属性的属性,例如Name和ID,但是此对象有另一个名为“Address”的对象,其中包含City和State等信息。这打破了sort()函数,因为我没有正确指定如何获得“城市”和“州”参数。

例如,为了访问“名称”,我们可以使用person.nameperson ['name'] 然而,在地址的情况下,事情会变得复杂一些。 我们可以使用person.address.cityperson ['address']。city甚至person ['address'] ['city']

但是,对于我传递给sort()函数的sortPropertyName ,没有格式组合似乎对我有用。 “名称”工作正常,但“城市”和“州”没有。

如何修改我的代码,以便一切按预期工作?

你可以使用这样的东西来访问嵌套的道具:

function ref(obj, str) {
    return str.split(".").reduce(function(o, x) { return o[x] }, obj);
}

接着

cmp = function(a, b) { return a > b ? 1 : a < b ? -1 : 0 }

self.people.sort(function (a, b) {
    return cmp(ref(a, "address.city"), ref(b, "address.city"))
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM