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

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

我暂时陷入了一个看似非常简单的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中有什么有用的吗?


MYYA
浏览 526回答 3
3回答

守着一只汪

下面是我不久前编写的一个朴素函数,但它适用于基本对象属性: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

蓝山帝景

你可以用传递get()和set()方法.获得var object = { 'a': [{ 'b': { 'c': 3 } }] };_.get(object, 'a[0].b.c');// → 3设置var object = { 'a': [{ 'b': { 'c': 3 } }] };_.set(object, 'a[0].b.c', 4);console.log(object.a[0].b.c);// → 4
打开App,查看更多内容
随时随地看视频慕课网APP