在 JavaScript 中创建一些关联数组
Posted
技术标签:
【中文标题】在 JavaScript 中创建一些关联数组【英文标题】:Creating some associative array in JavaScript 【发布时间】:2016-11-15 07:46:56 【问题描述】:我有一个包含数组的对象,我希望它包含一个关联数组,因此键是字符串。我该怎么做?
这不起作用:
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。
【问题讨论】:
AFAIK:无法在 JavaScript 中完成。 在 Javascript 中,对象是关联数组 正如@HectorBarbossa 所说,您必须对对象执行此操作:"yourKey": 42.314
规范是How to do associative array/hashing in JavaScript。
【参考方案1】:
想避免
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";
你不应该搞砸语言...
这是创建键:值映射、对象的正常方式:
var obj = foo: "bar"
obj.foo // -> bar
为什么不按照语言设计的那样去做呢?
【讨论】:
“这是一样的”——它们不一样。数组和对象之间有许多不同之处,即使您在每个对象上都放置了一个名为“foo”的属性。 @Quentin 你是对的,我在我的回答中添加了你的评论 对我来说最好使用 [] 因为我知道我打算像数组而不是对象一样使用它。即使对象的选择会更短的定义。当我创建最终对象(包装器)时,一切都会让我清楚。 @user1141649 — 您计划使用命名键,这不是“像数组一样”。 @user1141649 你不能像数组一样使用它,例如长度仍然是 0.. 查看编辑【参考方案2】:JavaScript 没有“关联数组”。
它有对象,您可以将值存储在命名属性中。
它有数组,通过整数属性存储一组有序的值。由于它们是一种对象,您还可以在它们上存储命名值(但您不能使用文字语法创建它们,只能在创建数组后添加它们)但这不是一种好的做法,它们将是几乎所有对数组有特殊情况处理的东西都会忽略它。
从 ES6 开始,它还具有 Maps,它们与对象相似,您可以为它们指定命名值,但也可以保留该顺序的数组。创建地图没有文字语法。
【讨论】:
以上是关于在 JavaScript 中创建一些关联数组的主要内容,如果未能解决你的问题,请参考以下文章