我需要澄清一些术语,因为现在我的项目在引用变量时会有一些术语混合。
考虑一个像这样定义的对象:
var anObject = {
a: {
value1: 1337,
value2: 69,
value3: "420 man"
}
}
如果我错了,请纠正我,但我认为a
是对象 anObject
的属性。
但是在anObject
的背景下,我应该如何引用value1
?它是一个"属性"藏汉?
我问的原因是我需要创建函数来访问变量中的变量"对象像这样:
function getProperty(name) {
// ...
}
var theValueImLookingFor = getProperty("a.value1");
如果这个问题不适合Stack Overflow,请告诉我这个问题应该放在哪里。感谢
编辑:我没有询问如何访问嵌套变量,我在术语中询问如何引用它。
鉴于value1
是a
的属性,属性为anObject
。什么是value1
到anObject
?它是"属性 - 属性"?我不是故意轻率,但我称之为什么?
答案 0 :(得分:2)
与a
属性为anObject
的方式相同,value1
属性为a
。
因此您可以使用以下方式访问它:
anObject.a.value1
就是这样。答案很长,可以将其分解为以下代码:
const innerObject = anObject.a;
const result = innerObject.value1;
请注意,在JavaScript中,对象只是键值对的列表,即字典。您可以使用任何数据类型作为值,甚至是另一个对象,因此您最终会得到嵌套对象 - 这正是您在这里所拥有的。
因此,对于您正在讨论的函数,您需要做的就是通过其分隔符char(例如.
)拆分给定的字符串,然后以递归方式遍历对象树,直到找到所需的位置到。
请注意,例如在npm上已经存在现成的模块,例如, nested-keys(只是为了任意命名,有许多其他模块执行相同或至少相似的任务)。
即使非常常用的库(如Lodash)也提供此功能,因此您很可能无需为自己编写代码,但可以使用这样的现成功能。例如,你可以使用[get](Lodash的https://lodash.com/docs/4.16.6#get]:
var object = { 'a': [{ 'b': { 'c': 3 } }] };
_.get(object, 'a[0].b.c');
// => 3
_.get(object, ['a', '0', 'b', 'c']);
// => 3
_.get(object, 'a.b.c', 'default');
// => 'default'
(此示例代码取自get
上链接的Lodash文档。)
如果您仍想创建自己的实现,那么查看Lodash的源代码可能是一个很好的起点。
<强>更新强>
关于你的编辑,我认为没有官方用语。您可以将其称为嵌套属性或子对象的属性。我想我最初的描述与你原来的一样:value1
是一个对象的属性,它是anObject
的属性。这不是优雅,但在技术上是正确的,正如我所说,我不认为有更好的(官方)术语。