0

JavaScriptでハッシュの配列を作成したい。つまり、次のことをしたい

 var messages = new Array;
 messages['info'].push(["info message1", "info message2", "info message3"]);  
 messages['error'].push(["error message1", "error message2", "error message3"]); 

次に、各キーを繰り返します。しかし、それは私にエラーを与えます"Cannot call method 'push' of undefined"

どうすればいいですか?

4

5 に答える 5

3

のプロパティにアクセスしようとしていますinfomessages、これは存在しません。したがって、その値はundefinedです。次に、 を呼び出して配列として処理しようとしてい.pushます。それはうまくいきません。

実際に必要なのは、これらの各プロパティに配列を割り当てることだと思います。

var messages = {};
messages['info'] = ["info message1", "info message2", "info message3"];  
messages['error'] = ["error message1", "error message2", "error message3"];
// or
// messages.info = ["info message1", "info message2", "info message3"];
// ...

数値キーを持つ配列のみを使用してください。文字列キーにはプレーン オブジェクトを使用します。

これmessages.infoが定義され、配列同様に、新しいメッセージを追加できます。

messages.info.push('some new message');

オブジェクトの詳細をご覧ください

于 2013-01-12T10:08:32.303 に答える
2

また、メインの配列/オブジェクトに配列を作成する必要があります:

var messages = []; // you probably shoudln't have an arrray but {}
messages['info'] = [];
messages['info'].push(["info message1", "info message2", "info message3"]);
于 2013-01-12T10:07:13.363 に答える
2

呼び出す前に、空の配列を作成する必要があります.push()。さらに、配列は数値インデックス アクセス用に設計されています。「info」のようなプロパティ名でアクセスしたい場合messagesは、配列の代わりにオブジェクトを使用する必要があります。

 var messages = {};
 messages['info'] = [];
 messages['info'].push(["info message1", "info message2", "info message3"]);  
 messages['error'] = [];
 messages['error'].push(["error message1", "error message2", "error message3"]); 

またはもう少し簡潔に:

 var messages = {};
 messages['info'] = ["info message1", "info message2", "info message3"];
 messages['error'] = ["error message1", "error message2", "error message3"]; 
于 2013-01-12T10:11:37.347 に答える
1

追加する前に配列を作成するだけです:

messages['info'] = [];
于 2013-01-12T10:07:02.733 に答える
1

messages['info']orを使用する前に定義していませんmessages['error']。最初に初期化します。また、キーと値のマッピングを格納するために配列を使用しないでください。そのためにはプレーンなオブジェクトを使用してください。

var messages = new Object;
messages['info'] = new Array;
messages['info'].push("info message1", "info message2", "info message3");
messages['error'] = new Array;  
messages['error'].push("error message1", "error message2", "error message3");

元のコードに別のエラーがあったことに注意してください。つまり、配列を に渡していたため.push()、結果として配列の配列の配列が生成されていました。

または、オブジェクトおよび配列リテラルを使用する (推奨):

var messages = {};
messages['info'] = ["info message1", "info message2", "info message3"];
messages['error'] = ["error message1", "error message2", "error message3"];
于 2013-01-12T10:11:47.583 に答える