【问题标题】:How to create an associative array in JavaScript literal notation如何在 JavaScript 文字符号中创建关联数组
【发布时间】: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数组的样子。
  • 不知道为什么有人反对我的问题?这有什么问题?

标签: javascript arrays associative-array


【解决方案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 绝对不是一个对象。原语也不是:stackoverflow.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
      猜你喜欢
      • 2017-08-02
      • 2011-03-17
      • 2020-01-26
      • 2012-03-21
      • 2019-04-20
      • 1970-01-01
      • 2016-11-15
      • 2015-02-14
      相关资源
      最近更新 更多