0

我在一个 javascript 对象中有对话框,它分为对象和数组(类似于 JSON 格式)。

我想通过传入它们各自的变量名来访问这些对象和数组......

例如,我将如何访问“parent_object_name”对象和子数组“array_name”?我尝试创建对象和数组,然后将它们传入,如下所示:

var parent_object_name = npc_dialog.people[NPC_id].dialogs.answers;
var child_array_name = npc_dialog.people[NPC_id].dialogs.answers.AnswerOne;
cycleDialog(0, parent_object_name, child_array_name);

但这没有用...

因此,我尝试将名称作为字符串传递:

cycleDialog(0, "parent_object_name", "child_array_name");

这也没有奏效。

cycleDialog 获取这些变量并将它们替换为:

function cycleDialog(NPC_id, TYPE, SUBTYPE) {
    NPCs_ARRAY[NPC_id].children[1].text = npc_dialog.people[NPC_id].dialogs.TYPE.SUBTYPE[dialog_id];
}

谢谢


编辑:

数据如下:

"dialog" : 
{   
    "dialog_name" :
    [ 
              "dialog",
              "more text..."
    ]
},
"answers" : 
{   
    "answer_name" :
    [ 
              "answer text here",
              "more text..."
    ]
}
4

3 回答 3

2

你可能想要这个:

function cycleDialog(NPC_id, TYPE, SUBTYPE) {
    NPCs_ARRAY[NPC_id].children[1].text = npc_dialog.people[NPC_id].dialogs[TYPE][SUBTYPE][dialog_id];
}

随着:

cycleDialog(0, parent_object_name, child_array_name);

.x和之间的区别在于[x]查找.xkey 'x',而[x]查找变量x评估为的 key:

> var array = {x: 100, foobar: 200}
> var x = 'foobar';
> array.x
100
> array[x]
200
于 2013-08-26T03:15:48.253 回答
0

您不能通过传递变量的名称将变量传递给函数。这样做的唯一方法是传递它们的地址或值。

于 2013-08-26T03:17:48.007 回答
0

您的函数cycleDialog从 object 获取数据npc_dialog.people[NPC_id].dialogs。如果我理解正确,您需要做的就是将您希望它查找的对象中的对象的名称传递给它,然后按照 Claudiu 的回答更改cycleDialog 函数。

例如cycleDialog(0, 'answers', 'answer_name');

会回来[ "answer text here", "more text..." ]

使用您提供的示例数据(并假设此数据在 中找到npc_dialog.people[0].dialogs)。

于 2013-08-26T03:42:14.627 回答