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"}

私が間違っていることを誰かに教えてもらいたいです!?

編集

解決済み - Quentin の説明と必要なコード変更に対する私の回答については、以下を参照してください - 他の人に役立つことを願っています。

4

2 に答える 2

2

これは同じ質問ではないと思います。私の質問は、変数の内容ではなく、リテラル変数名が使用されている理由です。

参照されている質問は、問題を解決する方法を説明していますが、説明を求めているためです。

変数名は JavaScript 識別子です。

オブジェクト リテラル構文のプロパティ名も JavaScript 識別子です (ただし、代わりに文字列リテラルを使用できます)。

識別子を同時に変数とプロパティ名の両方にすることはできないため、オブジェクト リテラル構文でプロパティ名に変数を使用することはできません。

参照されている質問で説明されているように、オブジェクトを作成してから、変数を角括弧表記で使用する必要があります。

于 2013-04-04T13:16:29.887 に答える
0

Quentinが提案したように、解決策は最初にオブジェクトを作成することです。

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