Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问嵌套对象键的变量名称_Javascript - Fatal编程技术网

Javascript 访问嵌套对象键的变量名称

Javascript 访问嵌套对象键的变量名称,javascript,Javascript,抱歉,如果这个标题没有意义,但我找不到一个方法来描述这一点。我已经搜索了很多,但不断得到的答案访问一个单一的水平 我有一个目标: var o = { id: 1, customer: { name: 'Barry Scroggins' } } 我有一个访问器: var keyName = 'customer' 我知道我可以通过以下方式获得对象的客户部分: o[keyName] // { name: 'Barry Scroggins' } 但是,在我的

抱歉,如果这个标题没有意义,但我找不到一个方法来描述这一点。我已经搜索了很多,但不断得到的答案访问一个单一的水平

我有一个目标:

var o = {
    id: 1,
    customer: {
        name: 'Barry Scroggins'
    }
}
我有一个访问器:

var keyName = 'customer'
我知道我可以通过以下方式获得对象的客户部分:

o[keyName] // { name: 'Barry Scroggins' }
但是,在我的应用程序中,我希望使用一组动态创建的变量访问customer对象的“name”部分。因此,我的应用程序生成了以下字符串:

var accessors = 'customer.name';
然后在“.”处拆分,以获得一个条目数组,但无论我尝试什么,都无法直接访问customer name部分

我知道我可以这样做:
o['customer']['name']
,但我需要动态地建立这些密钥,它们可以有任意级别(即
customer.address.zipcode


这是可能的,还是一种可怕的、可怕的建造方式?如果是这样,您有其他选择吗?

您可以分割路径并缩小对象

函数getValue(o,路径){ 返回路径.split('.').reduce(函数(o,k){ 返回(o |{})[k]; },o); } 变量o={ id:1, 客户:{ 姓名:“巴里·斯克罗金斯” } }, 访问者='customer.name';
log(getValue(o,访问器))虽然可能,但这是一种可怕的、可怕的构建方式。把一切都放在VarCustomer中,甚至不要创建VarO。对于那些没有更合理选择的人,请参考尼娜·斯科尔斯的答案。不过OP确实有更好的方法。@TurnipEntropy我同意,整个事情很混乱,但几乎所有东西都是从后端api中提取出来的,然后转储到一个模板中,用于呈现网页。虽然是重复的,但我更喜欢下面给出的答案。