小编典典

使用点表示法字符串访问对象的子属性[重复]

javascript

我暂时停留在看起来很简单的JavaScript问题上,但也许我只是缺少正确的搜索关键字!

说我们有一个对象

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

有几种方法可以访问99:

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

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

var s = "b.b2";

然后使用

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

一种方法是为其编写一个函数,该函数在点上分割字符串,并可能递归/迭代地获取属性。但是,有没有更简单/更有效的方法呢?这里的任何jQueryAPI中有用的东西吗?


阅读 316

收藏
2020-04-25

共1个答案

小编典典

这是我前几天写的一个天真的函数,但是它适用于基本的对象属性:

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
2020-04-25