2

私の全体のコード例は、以下と jsFiddle にあります: http://jsfiddle.net/rEhvt/

alert()多次元の JavaScript オブジェクトを作成しようとしています。オブジェクトalert()の単一のプロパティである場合、機能します。例えば:

alert(votes['77777'].stay);

alert()ただし、オブジェクト全体を取得しようとすると、多くのNULLs または空白が表示されます。私は次のことを試しました:

alert(JSON.stringify(votes));//returns lots of NULLs

alert(votes.join('\n'));//returns lots of blanks

私の意図は、最終的にオブジェクトをlocalStorageに送信することです

localStorage['votes']=JSON.stringify(votes);

そしてそれを取得します

retrievedVotes=JSON.parse(localStorage['votes'])

ただし、最初にオブジェクト構造を確認できるようにしたいと考えています。これは、JavaScript を使用して多次元オブジェクトを理解する最初の試みです。以下は、jsFiddle にもある私のコードのすべてです: http://jsfiddle.net/rEhvt/

//Movie #1
var movieID = 55555;
var stay = 'yes';

var votes = [];
votes[movieID]=[];
votes[movieID].stay = stay;

var scenes = 1;
votes[movieID].scenes = scenes; 

//Movie #2
var movieID = 77777;
var stay = 'no';

var votes = [];
votes[movieID]=[];
votes[movieID].stay = stay;

var scenes = 0;
votes[movieID].scenes = scenes; 

//Alert Single Item from votes
alert(votes['77777'].stay);

//Alert entire object
alert(JSON.stringify(votes));//returns NULLs

//Alert entire object
alert(votes.join('\n'));//returns lots of blanks
4

5 に答える 5

1
var movieID = 55555;
votes[movieID]

これにより、その映画の55555番目の投票指数が設定されます。だからあなたはたくさんの空白を持っています。77777についても同じことが言えます。

もし、するなら

console.log(votes.length);

次の結果が表示されます。

 77778 

もう1つの問題は、2番目のムービーを作成するときに、配列を完全に消去することです。var votes = [];

配列の代わりにオブジェクトを作成したい。{ }代わりに中括弧を使用しています[ ]

于 2012-09-27T04:00:14.887 に答える
1

変数を定義するとき{}の代わりに使用できます。[]votes

配列を定義し、インデックスで値を設定する場合、その前に要素がない場合は、nullで埋められます。たとえば、コード:

var arr = [];
arr[5]​ = 0;
alert(JSON.stringify(arr));​​​

提供します[null,null,null,null,null,0]

于 2012-09-27T04:00:56.700 に答える
1

{}配列ではなくオブジェクトを使用します[]...設定votes[7777]により、7,778個の要素に対応するように配列のインデックスが再作成されます...多くの未定義の要素(にJSON.stringify()変換されnullます)が含まれます。

さらに、配列に名前付きプロパティを設定しています。

votes[movieID]=[];
votes[movieID].stay = stay;

オブジェクトを使用した機能サンプルは次のとおりです(fiddle):

var votes = {
    // Movie #1
    '55555': { 
        stay: 'yes',
        scenes: 1,
        outtakes: 0,
        enhanced: 0,
        teaser: 0
    },
    // Movie #2
    '77777': { 
        stay: 'no',
        scenes: 0,
        outtakes: 0,
        enhanced: 0,
        teaser: 0
    }   
};

console.log(votes[77777].stay);
console.log(votes);

提供されたコードの1対1の変更(フィドル):

//Movie #1
var movieID = 55555;
var stay = 'yes';

var votes = {}; // changed to {}
votes[movieID]= {}; // changed to {}
votes[movieID].stay = stay;

var scenes = 1;
votes[movieID].scenes = scenes; 
var outtakes = 0;
votes[movieID].outtakes = outtakes; 
var enhanced = 0;
votes[movieID].enhanced = enhanced; 
var teaser = 0;
votes[movieID].teaser = teaser; 

//Movie #2
var movieID = 77777;
var stay = 'no';

//var votes = []; removed
votes[movieID]= {};  // changed to {}
votes[movieID].stay = stay;

var scenes = 0;
votes[movieID].scenes = scenes; 
var outtakes = 0;
votes[movieID].outtakes = outtakes; 
var enhanced = 0;
votes[movieID].enhanced = enhanced; 
var teaser = 0;
votes[movieID].teaser = teaser; 

//Alert Single Item from votes
alert(votes['77777'].stay);

//Alert entire object/array
alert(JSON.stringify(votes));//returns NULLs​
于 2012-09-27T04:01:42.873 に答える
1

を使用してarrayいますが、必要なのはオブジェクトです。

変化する

var votes = [];
votes[movieID]=[];

var votes = {};
votes[movieID]={};

等々。

于 2012-09-27T04:03:24.353 に答える
1

alertデバッグツールではありません

「まずオブジェクトの構造が見えるようにしたい」ということなので、適切な開発者ツールを使用する必要があります。お使いのブラウザにはおそらくそれらがあります。 を押してくださいF12。Firefox を使用している場合は、Firebug をインストールします。

次に、 のようなコマンドを使用するconsole.log(votes)と、すべてが開発者コンソールに出力され、マウスでツリーのようにナビゲートできます。

.toString()本当にすべてのオブジェクトを再帰的に処理したい場合alertは可能ですが、それを行う正当な理由がわかりません。

于 2012-09-27T04:05:37.680 に答える