在javascript中创建一个哈希数组

时间:2013-01-12 10:05:32

标签: javascript

我想在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"

我该怎么做?

5 个答案:

答案 0 :(得分:3)

您正在尝试访问info的{​​{1}}属性,该属性不存在,因此其值为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

Learn more about objects

答案 1 :(得分:2)

您还必须在主数组/对象中创建数组:

var messages = []; // you probably shoudln't have an arrray but {}
messages['info'] = [];
messages['info'].push(["info message1", "info message2", "info message3"]);

答案 2 :(得分: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"]; 

答案 3 :(得分:1)

在添加数组之前创建数组:

messages['info'] = [];

答案 4 :(得分: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"];