访问 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' }
];
该排序属性被传递给排序例程,然后排序例程应仅根据 sortTProperty 对数据进行排序:
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/)
这对于属于"根"属性的属性(例如名称和 ID)工作正常,但是此对象具有另一个称为"地址"的对象,其中包含城市和州等信息。这破坏了 sort() 函数,因为我没有正确指定如何获取"城市"和"状态"参数。
例如,为了访问"名称",我们可以使用 person.name 或人['名称']。然而,在地址的情况下,事情变得有点复杂。我们可以使用person.address.city或person['address'].city,甚至是person['address']['city']。
但是,对于我传递给 sort() 函数的 sortPropertyName 而言,似乎没有格式组合对我有用。"名称"工作正常,但"城市"和"州"则不行。
如何修改我的代码以使一切按预期工作?
你可以使用这样的东西来访问嵌套的 props:
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"))
}
相关文章:
- 访问键中包含空格的嵌套属性
- 如何将id数组与带下划线的对象数组嵌套属性进行比较
- 正在检查对象javascript中是否存在嵌套属性
- 更新JavaScript对象中的嵌套属性
- 使用 jQuery 传递的 Rails 嵌套属性
- 如何迭代json对象的嵌套属性并创建新的数组列表
- 如何正确传递具有排列属性的嵌套属性?(JSX)
- 如何动态获取对象的嵌套属性
- AngularJS - 包含嵌套属性指令的内容
- 嵌套属性作为函数参数
- 猫鼬:嵌套属性上为空
- 如何检查主干模型中的嵌套属性是否已更改
- 在 ngRepeat 中筛选嵌套属性
- 筛选器深层嵌套属性返回空数组
- 支持流星和铁路由器中具有嵌套属性的多个参数
- 主干虹吸嵌套属性
- 访问 JavaScript 中的嵌套属性
- 在 AJAX 响应中查找嵌套属性,这是 try/catch 的情况
- 从嵌套属性数组中获取对象嵌套值
- JQuery,从嵌套属性中访问对象的根属性