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

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

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

MYYA 2019-07-13 10:09:52
使用点符号字符串访问对象子属性我暂时陷入了一个看似非常简单的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贡献1872条经验 获得超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


查看完整回答
反对 回复 2019-07-13
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

你可以用传递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-07-13
  • 3 回答
  • 0 关注
  • 524 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信