我想在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"
我该怎么做?
答案 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
答案 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"];