我确定之前一定要问过,但我找不到SO的例子。 我有一个JSON字符串,开头就像这样:
{"model":"14","imgsize":"890","selection":{"SC":"BC","PC":"AC"},"changed":{"PC":"AC"}}
需要在用户输入上更改字符串,以便“选择”记录用户点击的所有输入,“更改”是用户点击的最后一件事。
所以我有一个函数从textarea读取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));
}
“选择”很好地工作但是“更改”了我传递的文字变量名称的更新(在这种情况下是节点)I.e。如果我使用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"}
我爱一个人告诉我我做错了什么!?
修改
已解决 - 请参阅下面的昆汀解释为什么以及我对代码更改的答案是必要的 - 希望它能帮助其他人。
答案 0 :(得分:2)
我不认为这是同一个问题,我的理由是使用文字变量名而不是变量的内容
question referenced解释了如何解决问题,但由于您要求解释。
变量名称是JavaScript标识符。
对象文字语法中的属性名称也是JavaScript标识符(尽管您可以使用字符串文字)。
由于标识符不能同时是变量和属性名称,因此不能在对象文字语法中使用变量作为属性名称。
如引用的问题中所述,您必须创建对象,然后使用方括号表示法中的变量。
答案 1 :(得分:0)
Quentin建议的解决方案是首先创建对象,即
delete json.changed;
json.changed = {};
json.changed[node] = value;