如何在 JavaScript 文字符号中创建关联数组
Posted
技术标签:
【中文标题】如何在 JavaScript 文字符号中创建关联数组【英文标题】:How to create an associative array in JavaScript literal notation 【发布时间】:2016-09-27 17:03:19 【问题描述】:我知道 javascript 中没有关联数组,只有对象。
但是我可以使用 括号表示法 创建一个带有字符串键的 array,如下所示:
var myArray = [];
myArray['a'] = 200;
myArray['b'] = 300;
console.log(myArray); // Prints [a: 200, b: 300]
所以我想在不使用括号符号的情况下做同样的事情:
var myNewArray = [a: 200, b: 300]; // I am getting error - Unexpected token:
这也不起作用:
var myNewArray = ['a': 200, 'b': 300]; // Same error. Why can I not create?
【问题讨论】:
使用这个有什么问题?var myNewArray = 'a': 200, 'b': 300;
@MT0 - 有效,但我试图理解为什么它不适用于数组表示法[]?
你想要一个对象,而不是一个数组。
数组表示法只是[]
之间的元素列表。不多也不少。这就是javascript数组的样子。
不知道为什么有人反对我的问题?这有什么问题?
【参考方案1】:
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 数组并且不向其传递任何数字属性。
但这可能不是您需要的!可能你只需要一个 JavaScript 对象,它与其他语言中的关联数组、字典或映射基本相同:它将字符串映射到值。这很容易做到:
var myObj = a: 200, b: 300;
但重要的是要了解这与您所做的略有不同。 myObj instanceof Array
将返回 false
,因为 myObj
不是原型链中 Array
的祖先。
【讨论】:
javascript 有一流的数组,所以没有 @self 告诉typeof null
。此外,字符串、布尔值和数字等原语通常也不被视为对象。
但它们是对象,通常不是对象实例
我想补充一点,当您创建像[1, 2, 3, 'foo']
这样的数组时,它与0:1, 1:2, 2:3, 3: "foo" 不同,主要是因为 array.push()
或 array.slice()
等特定于数组的函数。
@self undefined
绝对不是一个对象。原语也不是:***.com/questions/17256182/…【参考方案2】:
你可以使用地图:
var arr = new Map([
['key1', 'User'],
['key2', 'Guest'],
['key3', 'Admin'],
]);
var res = arr.get('key2');
console.log(res); // The value is 'Guest'
【讨论】:
这很完美,但请记住它在 Internet Explorer 中不起作用 @TaylorA.Leach,它可以与Babel
转译一起使用,不是吗?
大多数现代浏览器都支持,查看这个页面:caniuse.com/#search=Map 但是你可以使用 Babel 编译器编译成 ES5。【参考方案3】:
你想在这种情况下使用一个对象
var myObject = 'a' : 200, 'b' : 300 ;
此答案链接到更深入的解释:How to do associative array/hashing in JavaScript
【讨论】:
【参考方案4】:嗯,你正在创建一个数组,它实际上是一个对象:
var arr = [];
arr.map;
// function(..)
arr['map'];
// function(..)
arr['a'] = 5;
console.log(arr instanceof Object); // true
您可以向arr
添加字段和函数。它不会将它们“插入”到数组中(如arr.push(...)
)。
您可以使用[]
语法引用对象字段。
【讨论】:
【参考方案5】:关联数组是一个以 name 为索引的数组,类似于 object 而不是 numbers 像 regular array .您可以通过以下方式创建关联数组:
var arr = new Array(); // OR var arr = [];
arr['name'] = 'david'
arr['age'] = 23;
console.log(arr['name']);
【讨论】:
问题是如何一步完成; OP 在问题中表明他们知道如何创建一个数组,然后一个一个地为其分配任意属性(并且他们的代码没有你的错误)。【参考方案6】:你可以用这种方式做你想做的事:
myNewArray = new Array ('a' : 200, 'b' : 300)
【讨论】:
这不能按 op 的要求工作。您需要通过索引然后按键访问项目。所以要获得值“200”,您需要执行 myNewArray[0]['a']。 op 想要作为 myNewArray['a'] 访问以获得值 200以上是关于如何在 JavaScript 文字符号中创建关联数组的主要内容,如果未能解决你的问题,请参考以下文章