当前位置: 首页 > 面试题库 >

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

左翰海
2023-03-14
问题内容

我暂时停留在看起来很简单的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中有用的东西吗?


问题答案:

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

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


 类似资料:
  • 问题内容: 我正在编写一个与已在使用的Google Analytics(分析)API交互的Angular应用。Google返回的数据以“ ga:”为前缀,例如“ ga:newVisits”示例。 如果我使用表达式{{total.ga:newVisits}},Angular无法解析它。逃避冒号继续的任何尝试均导致错误或完全逃避我的表达。 如何将{{total.ga:newVisits}}传递给Ang

  • 问题内容: 我正在尝试使用通过函数传递的变量访问JSON: 显然,这是行不通的,因为“类别”是我通过函数传递的内容,而不是属性的真实名称,但是我一直尝试尝试不同的可能性。提前致谢! 问题答案: 在JS中,是的同义词。 另外,您正在处理的是JavaScript对象,而不是JSON(尽管它可能 起源于 JSON ) *对于遇到这种情况并使用ES6的用户进行 *更新 ,现在可以在分配过程中使用变量: 作

  • 问题内容: 我有一个像这样的JSON数组: 我想通过将ID,列名和新值传递给函数来更新它: 我的问题是,如何更新值?我知道我可以做以下事情: 但是出于我的原因,列名是作为字符串传递的。 问题答案: 在JavaScript中,您可以使用文字符号访问对象属性: 或使用带括号的表示法,使用字符串作为属性名称: 这两个语句的作用 完全相同 ,但是在第二个语句的情况下,由于括号中的内容是字符串,因此它可以是

  • 我正在做codecadiy的javascript教程,遇到的问题如下: console.log(friends.prop)将打印出未定义的,但如果我将其更改为 朋友[prop],它将打印账单和史蒂夫对象信息。 我看到w3c教程说有两种访问方法是正确的,我无法理解 到底是什么问题? 谢谢提前。

  • 问题内容: 首先看下面的JavaScript对象 我想将值设置为与相同,因此我将对象值放在前面,但它对我不起作用,我也使用过,但仍然失败。我的问题是如何访问对象内对象的属性。 一些用户沉迷于问“您想做什么或发送脚本等”,对于那些人来说,答案很简单:“我想访问对象内的对象属性”,上面提到了脚本。 任何帮助将不胜感激 :) 问题答案: 使用 对象文字 语法时,不能在初始化期间引用对象。创建对象后,需要

  • 问题内容: 如何给定的属性的值? 问题答案: 有称为和的内置函数 在这种情况下