如何使用Javascript文字表示法创建关联数组

问题描述 投票:23回答:5

据我所知,associative arrays没有javascript,只有objects

但是我可以使用array创建一个带字符串键的bracket notation,如下所示:

var myArray = [];
myArray['a'] = 200; 
myArray['b'] = 300; 
console.log(myArray); //prints [a: 200, b: 300]

所以,我想在不使用bracket notation的情况下做同样的事情

var myNewArray = [a: 200, b: 300]; //getting error - Unexpected token:

这也行不通

var myNewArray = ['a': 200, 'b': 300]; //same error, why can I not create?
javascript arrays associative-array
5个回答
33
投票

JavaScript没有关联数组,只有对象。甚至JavaScript数组基本上也只是对象,只是特殊的东西,属性名称是数字(0,1,...)。

所以先看看你的代码:

var myArray = []; // creating a new array object
myArray['a'] = 200; // setting the attribute a to 200
myArray['b'] = 300; // setting the attribute b to 300

重要的是要了解myArray['a'] = 200;myArray.a = 200;相同!

所以从你想要的开始:你不能创建一个javascript数组,并在一个语句中传递没有数字属性。

但这可能不是你所需要的!可能你只需要一个JS对象,它与其他语言中的关联数组,字典或映射基本相同:它将字符串映射到值。这很容易做到:

var myObj = {a: 200, b: 300};

但重要的是要明白,这与你所做的略有不同。 myObj instanceof Array将返回false,因为myObj不是原型链中Array的祖先。


8
投票

你可以使用Map:

var arr = new Map([ 
   ['key1', 'User'], 
   ['key2', 'Guest'], 
   ['key3', 'Admin'], 
]);
var res = arr.get('key2');  
console.log(res); // The value is 'Guest'

2
投票

好吧,你正在创建一个数组,实际上是一个对象。

var arr = [];
arr.map;
// function(..)
arr['map'];
// function(..)

arr['a'] = 5;

console.log(arr instanceof Object); // true

您可以向arr添加字段和函数。它不会将它们“插入”到数组中(如arr.push(...)

您可以使用[]语法引用对象字段


1
投票

在这种情况下,您想要使用对象

var myObject = {'a' : 200, 'b' : 300 };

这个答案链接到更深入的解释:How to do associative array/hashing in JavaScripthttp://blog.xkoder.com/2008/07/10/javascript-associative-arrays-demystified/


1
投票

数组和对象是不同的东西。

对于对象,您可以执行以下操作:

var obj = { "property1": "value1" };
obj.property2 = "value2";

对于数组,您必须这样做:

var arr = [];
arr[0] = "value";
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.