在Javascript

时间:2016-07-12 21:59:21

标签: javascript arrays associative-array

我有包含数组的对象,我希望它包含关联数组,因此键是字符串。怎么做?这不起作用:

{profiles: { easy:["example" : 1],advanced:["example" : 1] }

我想避免

console.log({profiles: { easy:{"example" : 1},advanced:{"example" : 1} })

因为 easy 高级成员不会显示为数组而是显示为对象。

我知道的另一种方式是: 数组[' key2'] ='新值&#39 ;; 但这不是对象的一部分,所以我需要拆分多行的命令 - 这不是我想要的。

PHP有类似数组的东西(" mykey" =>" myValue"),但JavaScript有类似的东西吗?

但我不想使用框架,这只是JavaScript。

2 个答案:

答案 0 :(得分:6)

JavaScript没有“关联数组”。

它有对象,您可以在命名属性中存储值。

它有数组,它通过整数属性存储一组有序的值。由于它们是一种对象,您也可以在它们上存储命名值(但是您不能使用文字语法创建它们,只能在创建数组后添加它们)但这不是好的做法,它们将是被几乎所有对数组进行特殊处理的事情都忽略了。

从ES6开始,它也有Maps,它与对象类似,你可以给它们命名值,但也保留了那个顺序的数组。创建Map没有文字语法。

答案 1 :(得分:1)

  

希望避免
  console.log({profiles: { easy:{"example" : 1},advanced:{"example" : 1} })

为什么,有理由避免语言特定的功能吗?

如果我告诉你你可以这样做:(应该避免)

var array = [];
array["foo"] = "bar";
array.foo // -> bar

问题:

array.length // -> 0

所以,即使您可以将属性主要应用于js中的所有内容,例如:

var str = "hello";
str.type = "greetings";
你不应该搞这种语言..

这是创建键的常规方法:值映射,对象。

var obj = {foo: "bar"}
obj.foo // -> bar

为什么不这样做,就像语言设计的那样?