在 JavaScript 中创建一些关联数组
Creating some associative array in JavaScript
我有一个包含数组的对象,我希望它包含一个关联数组,因此键是字符串。我该怎么做?
这不起作用:
{profiles: { easy:["example" : 1], advanced:["example" : 1] }
我想避免
console.log({profiles: { easy: {"example": 1}, advanced:{"example": 1} })
因为easy和advanced成员不是显示为数组而是显示为对象。
我知道的另一种方式是:
array['key2'] = 'new value';
但这不是对象的一部分,所以我需要将命令拆分为多行 - 这不是我想要的。
PHP 有类似 array("mykey" => "myValue") 的东西,但是 JavaScript 有类似的东西吗?
但我不想使用框架。这只是 JavaScript。
JavaScript 没有 "associative arrays".
它有对象,您可以在命名属性中存储值。
它有数组,通过整数属性存储一组有序的值。由于它们是一种对象,您还可以在它们上存储命名值(但您不能使用文字语法创建它们,只能在创建数组后添加它们)但这不是好的做法,它们将是几乎被任何对数组有特殊情况处理的东西忽略。
从 ES6 开始,它还有 Maps,这与对象相似,您可以为它们提供命名值,但也可以保留该顺序的数组。没有用于创建地图的文字语法。
wanted to avoid
console.log({profiles: { easy:{"example" : 1},advanced:{"example" : 1} })
为什么?是否有理由避免特定于语言的功能?
如果我告诉你你可以这样做(应该避免):
var array = [];
array["foo"] = "bar";
array.foo // -> bar
它的问题:
array.length // -> 0
因此,即使您可以将属性应用于 大部分 JavaScript 中的所有内容,例如:
var str = "hello";
str.type = "greetings";
你不应该搞砸语言...
这是创建 key:value 地图、对象的正常方法:
var obj = {foo: "bar"}
obj.foo // -> bar
为什么不像语言设计的那样去做呢?
我有一个包含数组的对象,我希望它包含一个关联数组,因此键是字符串。我该怎么做?
这不起作用:
{profiles: { easy:["example" : 1], advanced:["example" : 1] }
我想避免
console.log({profiles: { easy: {"example": 1}, advanced:{"example": 1} })
因为easy和advanced成员不是显示为数组而是显示为对象。
我知道的另一种方式是:
array['key2'] = 'new value';
但这不是对象的一部分,所以我需要将命令拆分为多行 - 这不是我想要的。
PHP 有类似 array("mykey" => "myValue") 的东西,但是 JavaScript 有类似的东西吗?
但我不想使用框架。这只是 JavaScript。
JavaScript 没有 "associative arrays".
它有对象,您可以在命名属性中存储值。
它有数组,通过整数属性存储一组有序的值。由于它们是一种对象,您还可以在它们上存储命名值(但您不能使用文字语法创建它们,只能在创建数组后添加它们)但这不是好的做法,它们将是几乎被任何对数组有特殊情况处理的东西忽略。
从 ES6 开始,它还有 Maps,这与对象相似,您可以为它们提供命名值,但也可以保留该顺序的数组。没有用于创建地图的文字语法。
wanted to avoid
console.log({profiles: { easy:{"example" : 1},advanced:{"example" : 1} })
为什么?是否有理由避免特定于语言的功能?
如果我告诉你你可以这样做(应该避免):
var array = [];
array["foo"] = "bar";
array.foo // -> bar
它的问题:
array.length // -> 0
因此,即使您可以将属性应用于 大部分 JavaScript 中的所有内容,例如:
var str = "hello";
str.type = "greetings";
你不应该搞砸语言...
这是创建 key:value 地图、对象的正常方法:
var obj = {foo: "bar"}
obj.foo // -> bar
为什么不像语言设计的那样去做呢?