在 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 )

因为 easyadvanced 成员不显示为数组,而是显示为对象。

我知道的另一种方法是:

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 中创建一些关联数组的主要内容,如果未能解决你的问题,请参考以下文章

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

在 PHP 中创建关联数组的数组

在 bash 3 中创建关联数组

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

使用整数键创建关联数组

PHP 中创建数组的方法(私人收藏)