如何在 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 而不是 numbersregular 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 文字符号中创建关联数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sequelize 中创建关联

如何在 RSpec (rails) 中创建或指定关联?

怎样在文件夹选项中创建关联

如何在 jquery 中创建二维关联数组?

如何在 jquery 中创建关联数组并通过 ajax 发送以使用 php 解析?

如何实现一个页面两个SELECT的动态关联