javascript - 使用点符号字符串访问对象子属性

标签 javascript jquery

<分区>

我暂时被看似非常简单的 JavaScript 问题困住了,但也许我只是缺少正确的搜索关键字!

假设我们有一个对象

var r = { a:1, b: {b1:11, b2: 99}};

有几种方法可以访问99:

r.b.b2
r['b']['b2']

我想要的是能够定义一个字符串

var s = "b.b2";

然后使用

访问 99
r.s or r[s] //(which of course won't work)

一种方法是为其编写一个函数,将字符串拆分为点,并可能递归/迭代地获取该属性。但是有没有更简单/更有效的方法呢?在此处的任何 jQuery API 中有什么有用的吗?

最佳答案

这是我刚才写的一个简单的函数,但它适用于基本的对象属性:

function getDescendantProp(obj, desc) {
    var arr = desc.split(".");
    while(arr.length && (obj = obj[arr.shift()]));
    return obj;
}

console.log(getDescendantProp(r, "b.b2"));
//-> 99

虽然有一些答案将此扩展为“允许”数组索引访问,但这并不是真正必要的,因为您可以通过此方法使用点符号指定数字索引:

getDescendantProp({ a: [ 1, 2, 3 ] }, 'a.2');
//-> 3

关于javascript - 使用点符号字符串访问对象子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051975/

相关文章:

javascript - 处理从单个输入元素通过 POST 上传的多个文件

javascript - DOMParser - 获取元素样式

jquery - 如何在jquery菜单中隐藏子菜单

javascript - 这里的jquery代码有区别吗?

javascript - 为什么 JQuery 要求我显式地使排队的图像淡出出队?

javascript - 我的左边位置由于某种原因不在右边

javascript - Laravel , Jquery 通过选择的下拉列表填充数据

javascript - jQuery 通知插件点播功能不起作用

javascript - 修改元素的属性

jquery - executeSql 查询错误