为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼唤远方 2019-08-03 07:03:59
使用点符号字符串访问对象子属性我暂时陷入了一个看似非常简单的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中有什么有用的吗?
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

下面是我不久前编写的一个朴素函数,但它适用于基本对象属性:

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



查看完整回答
反对 回复 2019-08-05
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

你可以用传递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




查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号