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

您正在尝试访问 的属性info,该属性messages不存在,因此其值为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()它。此外,数组是为数字索引访问而设计的。如果你想messages通过像“info”这样的属性名来访问,那么你应该使用一个对象而不是一个数组:

 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']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 回答