在javascript中创建一个哈希数组

Create an array of hashes in javascript

本文关键字:一个 哈希 数组 javascript 创建      更新时间:2023-09-26

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

我该怎么做?

您正在尝试访问messages的属性info,该属性不存在,因此其值为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');

了解对象的更多信息

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

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

在调用.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"]; 

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

messages['info'] = [];

您在使用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"];