2012-04-24 10 views
0

I持って次のコード:Javascriptオブジェクトがフィールドを更新しないのはなぜですか?以下は、

var imageType = "BoxArt"; 
var uploadReason = "New season"; 
var fileKey = "b2fc"; 

alert("imageType = " + imageType); 
alert("uploadReason = " + uploadReason); 
alert("fileKey = " + fileKey); 

var iVO = { "images":{}}; 
var thisImage = fileKey; 
iVO["images"][thisImage.fileKey] = thisImage; 
iVO["images"][thisImage.imageType] = imageType; 
iVO["images"][thisImage.uploadReason] = uploadReason; 

alert("iVO['images'][thisImage.imageType] = " + iVO["images"][thisImage.imageType]); 
alert("iVO['images'][thisImage.uploadReason] = " + iVO["images"] [thisImage.uploadReason]); 
alert("iVO['images'][thisImage.fileKey] = " + iVO["images"][thisImage.fileKey]); 
alert("JSON.stringify(iVO):\n" + JSON.stringify(iVO)); 

私は次の出力を取得し、これを実行します。

imageType = "BoxArt" 
uploadReason = "New season" 
fileKey = "b2fc" 
iVO['images'][thisImage.imageType] = "New season" 
iVO['images'][thisImage.uploadReason] = "New season" 
iVO['images'][thisImage.fileKey] = "New season" 
JSON.stringify(iVO): 
{"images"}:{"undefined":"New season"}} 

はここで何が起こっていますか?!?!?予想通り(imageTypeuploadReason、およびfileKey割り当てを示す)

最初の3つのアラート

がありますが、 iVOオブジェクトは、私が期待まったくのように振る舞っていません。 JSON.stringifyメソッドは通常の json2.jsメソッドですが、変更していません。

「ニューシーズン」がすべてフィールド値のiVO["images"]として表示されるのはなぜですか?iVO割り当てが正しく機能しないのはなぜですか? 修正するためには何が必要ですか?

JSON.stringify(iVO)の所望の出力は、(かなり-印刷形式で)次のようになります。事前に

{ 
    "images": 
    { 
     "b2fc": 
     { 
      "imageType":"BoxArt", 
      "uploadReason":"New season", 
      "fileKey":"b2fc" 
     } 
    } 
} 

ありがとう!

答えて

1

あなたはiVO["images"][fileKey]["imageType"] = imageType

のような何かをしたいので thisImage.fileKeythisImage.imageTypethisImage.uploadReasonが無効な参照おそらく

あるfileKeyに以前の割り当てによって文字列です。

1

私はあなたがそれらのドットとフィールド名のサブオブジェクトの魔法自動ネスト解除/ vivificationはありません

iVO.images[thisImage] = { 
     "imageType":"BoxArt", 
     "uploadReason":"New season", 
     "fileKey":"b2fc" 
    }; 

として私が書くことになる

iVO['images'][thisImage] = { 
     "imageType":"BoxArt", 
     "uploadReason":"New season", 
     "fileKey":"b2fc" 
    }; 

をしたいと思います。あなたは

iVO["images"][thisImage.fileKey] = thisImage; 
iVO["images"][thisImage.imageType] = imageType; 
iVO["images"][thisImage.uploadReason] = uploadReason; 

thisImageを定義したところ、確かに