0

我确定这之前一定有人问过,但我找不到关于 SO 的示例。我有一个 JSON 字符串,它的开头是这样的:

{"model":"14","imgsize":"890","selection":{"SC":"BC","PC":"AC"},"changed":{"PC":"AC"}}

需要在用户输入时更改字符串,以便“选择”记录用户单击的所有输入,而“更改”是用户单击的最后一件事。

所以我有一个函数可以从文本区域读取 JSON 字符串,根据用户选择的内容(节点和值)对其进行修改,然后将其写回文本区域进行调试。

function changeJSON(node, value) {
    json = JSON.parse($('#json').val());
    json.selection[node] = value;
    delete json.changed;
    json.changed = {node:value};
    $('#json').val(JSON.stringify(json));
}

“选择”工作得很好,但“更改”更新了我传递的文字变量名称(在本例中为节点),即如果我用 changeJSON("BC","HC") 调用函数,则 JSON 字符串变为:

{"model":"14","imgsize":"890","selection":{"SC":"BC","PC":"AC","BC":"HC"},"changed":{"node":"HC"}}

我了解 javascript 正在尝试做什么,但我希望更改的元素是我的变量包含的内容,即

,"changed":{"BC","HC"}

并不是

,"changed":{"node","HC"}

我很想有人告诉我我做错了什么!?

编辑

已解决 - 请参阅下面的昆汀解释,了解原因和我对必要代码更改的回答 - 希望对其他人有所帮助。

4

2 回答 2

2

我不认为这是同一个问题,我的问题是为什么使用文字变量名而不是变量的内容

引用的问题解释了如何解决问题,但因为您要求解释。

变量名是 JavaScript 标识符。

对象文字语法中的属性名称也是 JavaScript 标识符(尽管您可以使用字符串文字代替)。

由于标识符不能同时是变量和属性名称,因此不能在对象字面量语法中使用变量作为属性名称。

如引用问题中所述,您必须创建对象,然后使用方括号表示法中的变量。

于 2013-04-04T13:16:29.887 回答
0

正如昆汀建议的那样,解决方案是首先创建对象,即

delete json.changed;
json.changed = {};
json.changed[node] = value;
于 2013-04-04T13:23:29.827 回答