当前位置: 首页 > 知识库问答 >
问题:

使用变量动态访问对象属性

裴意
2023-03-14

我正在尝试使用动态名称访问对象的属性。这可能吗?

const something = { bar: "Foobar!" };
const foo = 'bar';
something.foo; // The idea is to access something.bar, getting "Foobar!"

共有2个答案

洪开济
2023-03-14

这是我的解决方案:

function resolve(path, obj) {
    return path.split('.').reduce(function(prev, curr) {
        return prev ? prev[curr] : null
    }, obj || self)
}

用法示例

resolve("document.body.style.width")
// or
resolve("style.width", document.body)
// or even use array indexes
// (someObject has been defined in the question)
resolve("part.0.size", someObject) 
// returns null when intermediate properties are not defined:
resolve('properties.that.do.not.exist', {hello:'world'})
傅高逸
2023-03-14

有两种方法可以访问对象的属性:

  • 点表示法:something.bar
  • 括号表示法:something['bar']

括号之间的值可以是任何表达式。因此,如果属性名存储在变量中,您就得使用括号表示法:

null

var something = {
  bar: 'foo'
};
var foo = 'bar';

// both x = something[foo] and something[foo] = x work as expected
console.log(something[foo]);
console.log(something.bar)
 类似资料:
  • 问题内容: 我正在尝试使用动态名称访问对象的属性。这可能吗? 问题答案: 有两种方法可以访问对象的属性: 点表示法: 括号符号: 方括号之间的值可以是任何表达式。因此,如果属性名称存储在变量中,则必须使用方括号表示法:

  • 问题内容: 我正在尝试从JavaScript中的JSON过滤数据。 我定义一个变量。我想要等于(不等于)的属性。到目前为止,我还没有找到一种方法。 其他所有内容均正常运行,因为当我将其更改为特定条目(例如,item.date)时,它可以正常工作。我找不到正确的语法。 问题答案: 试试看,也可以通过这种方式访问​​javascript对象。

  • 我的问题很简单,但我认为Velocity不支持这一点。我必须使用vm文件中定义的变量名访问映射或对象。 配置为Map 这里的问题是,当我发送此模板进行渲染时,我得到以下代码: 所以看起来在呈现模板时,$img_src、$img_link和$img_alt没有正确定义,velocity试图在自身上呈现config对象,在下一轮呈现时,config对象已经呈现为纯文本,其余变量就放在其中。 比这更奇怪

  • 问题内容: 编码: 对象数据: 问题: 正确显示“ 2009-05-27 16:36:45”。 正确显示“ A5A50000”。 报告“ data.bsID未定义”。 报告“数据[bsID]未定义”。 我不清楚何时/不评估变量。也许我忽略了一些愚蠢的事情,但是我无法在这里解决我的问题。 问题答案: 您可以通过点表示法或括号表示法访问对象属性。 具有动态值时,必须使用后者: 因此,您真正想要的是:

  • 问题内容: 为什么我们可以通过Java中的对象引用访问静态变量,如下面的代码? 问题答案: 通常,每个人都可以访问公共变量,并且只能从该类的当前实例内部访问私有变量。在您的示例中,您被允许从方法中访问变量,因为该方法在Static类内。 如果您想知道为什么为什么要允许您从静态类的另一个实例(而不是当前实例)访问它(通常不允许使用私有变量),这仅仅是因为静态变量不存在于静态类中。每个实例,但每个班级

  • 问题内容: 如何使用变量作为键访问对象。这是我的代码示例: 问题答案: 您可以访问数组之类的对象: