2

わかりましたので、次のようなオブジェクトがあります。

var myobject = {
   "field_1": "lorem ipsum",
   "field_2": 1,
   "field_2": 2,
   "field_2": 6
};

ご覧のとおり、オブジェクトには重複した名前がありますが、値が異なります。(jQueryを使用して)次のように実行すると:

$.each(myobject, function(key, value)
{
   console.log(key);
   console.log(myobject[key]);
   console.log(myobject[value]);
}

key - returns the correct key
myobject[key] - returns the name for that key
myobject[value] - returns the last elements', with that name, value

つまり、field_2 では 6 が返されますが、オブジェクト内で 3 回繰り返されるため、3 回出力されます。

私の質問は、最後のフィールドだけでなく、その重複した名前付きフィールドの正しい値を取得する方法です

ありがとうございました

4

8 に答える 8

6

それはオブジェクトである配列ではありません。配列であるオブジェクトのプロパティを作成し、そこにさまざまな値を格納することをお勧めします。

var myarray = {
   "field_1": "lorem ipsum",
   "field_array": []
};

myarray.field_array.push(value);

次に、配列のそのプロパティをループします。

于 2010-10-22T11:03:59.547 に答える
2

連想配列は Javascript には存在しません。作成したのは、JSON 形式を使用したオブジェクトです。

このようなものは、あなたが求めているものをさらに提供すると思いますが、あなたが達成しようとしていることを正確に質問することをお勧めします.

次のコードでは、重複した「キー」の複数のインスタンスにアクセスできますが、

var myDataset = [
   { "field_1": "lorem ipsum" },
   { "field_2": 1 },
   { "field_2": 2 },
   { "field_2": 6 }
];


$.each(myDataset, function(valuePairIndex, value)
{
    $.each(myDataset[valuePairIndex], function(key, value1)
    {
       var valuePair = myDataset[valuePairIndex];
       console.log(valuePairIndex);
       console.log(key + ' = ' + valuePair[key]);

//       console.log('key = ' + key);
//       console.log('valuePair[key] = ' + valuePair[key]);
    });
});
于 2010-10-22T12:58:39.160 に答える
2
  1. コードの構文が無効です。
  2. Javascript には連想配列はありません
  3. あなたが定義したものはオブジェクトです
  4. プロパティに値を 3 回指定する場合は、最後の値が含まれていることを確認してください

テスト

var obj = {
   "field_1": "lorem ipsum",
   "field_2": 1,
   "field_2": 2,
   "field_2": 6
};

for ( var i in obj ) {
  console.log(i + " = " + obj[i]);
}

出力

field_1 = lorem ipsum
field_2 = 6
于 2010-10-22T11:08:16.877 に答える
1

それは不可能。

結果のオブジェクトには 2 つの要素しか含まれず、最初と 2 番目の field_2 要素は作成時に失われます。

于 2010-10-22T11:10:12.160 に答える
1

キーは一意である必要があります。

于 2010-10-22T11:02:46.230 に答える
1

これはできません。配列キーは一意である必要があります。

Firefox/Firebug がインストールされている場合 (または別のブラウザーで同様のものがある場合)、Firebug コンソールに次のように入力して試すことができます。

var myarray = {
   "field_1": "lorem ipsum",
   "field_2": 1,
   "field_2": 2,
   "field_2": 6
};
console.dir(myarray);

Firebug は次のように応答します。

field_1      "lorum ipsum"
field_2      6

つまり、これは機能しますが、field_2 に指定された後続の各値によって前の値が上書きされます。一度に 1 つの値しか持てません。

あなたが望むものに最も近いのは、次のように field_2 自体を配列にすることです:

var myarray = {
   "field_1": "lorem ipsum",
   "field_2": [1,2,6]
};

今実行するとconsole.log、次のようになります。

field_1      "lorum ipsum"
field_2
    0        1
    1        2
    2        6

それが役立つことを願っています。

于 2010-10-22T11:08:56.943 に答える
0

これを回避する唯一の方法は、フィールドを一意の識別子に変更するか、次のようにすることです。

var myarray = {
   "field_1": "ロレム イプサム",
   "field_2": [
       {"値_1": 1},
       {"value_2": 2},
       {"値_3": 6}
   ]
};
于 2010-10-22T11:05:29.203 に答える
-1

同じ値を数回上書きしています。

あなたが望むのはおそらく次のようなものです:

var myarray = {
   "field_1": "lorem ipsum",
   "field_2": [1,2,6]
};

これは、現在持っているものと同様の方法で書くことができます:

var myarray = {};

myarray.field_1 = [];
myarray.field_1.push('lorem ipsum');
myarray.field_2 = [];
myarray.field_2.push(1);
myarray.field_2.push(2);
myarray.field_2.push(6);

配列も作成したことに注意してくださいfield_1。これは、一貫性を保つために、必要になると思いました。

于 2010-10-22T11:06:54.960 に答える