10

割り当てられた変数をjson配列の識別子として使用できるかどうか疑問に思っています。私がこれを試したとき、私はいくつかの予期しない結果を得ていました:

(コードは単純化され、パラメーターは別の方法で渡されます)

var parameter = 'animal';
var value = 'pony';

Util.urlAppendParameters(url, {
  parameter: value
});


Util.urlAppendParameters = function(url, parameters) {
  for (var x in parameters) {
    alert(x);
  }
}

これで、アラートポップアップに「動物」ではなく「パラメータ」と表示されます。別の方法(配列を作成し、すべてのパラメーターを新しい行に割り当てる)を使用できることはわかっていますが、コードをコンパクトに保ちたいと考えています。

だから私の質問は:json配列の識別子として変数を使用することは可能ですか?もしそうなら、その方法を教えていただけますか?

前もって感謝します!

4

3 に答える 3

10

2つのステップでオブジェクトを作成し、[]プロパティアクセサーを使用する必要があります。

var parameter = 'animal';
var value = 'pony';

var obj = {};
obj[parameter] = value;

Util.urlAppendParameters (url, obj);

I don't think JSON Array is the more correct term, I would call it Object literal.

于 2010-04-29T14:55:43.133 に答える
3

No, you can't use a variable as an identifier within an object literal like that. The parser is expecting a name there so you can't do much else but provide a string. Similarly you couldn't do something like this:

var parameter = 'animal';
var parameter = 'value'; //<- Parser expects a name, nothing more, so original parameter will not be used as name

The only work around if you really really want to use an object literal on a single line is to use eval:

Util.urlAppendParameters (url, eval("({" + parameter + " : value})");
于 2010-04-29T15:45:04.270 に答える
1

ニーズに応じて、ヘルパー関数を使用してオブジェクトを作成することもできます。

Util.createParameters = function(args) {
    var O = {};
    for (var i = 0; i < arguments.length; i += 2)
        O[arguments[i]] = arguments[i + 1];
    return O
}

Util.urlAppendParameters (url, Util.createParameters(parameter, value, "p2", "v2"));
于 2010-04-29T15:02:37.013 に答える