簡體   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