在JavaScript中创建一些关联数组

3
我是一名有用的助手,可以为您进行翻译。以下是需要翻译的内容:

我有一个包含数组的对象,我希望它包含一个关联数组,因此键是字符串。我该怎么做?

这样不起作用:

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

我想避免

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

因为“简单”和“高级”成员不是以数组的形式显示,而是以对象的形式显示。
我知道的另一种方法是这样的:
array['key2'] = 'new value';

但这不是对象的一部分,所以我需要将命令拆分为多行 - 这不是我想要的。

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

然而,我不想使用框架。这只是纯 JavaScript。


据我所知:在JavaScript中无法实现。 - Script47
1
在Javascript中,对象是关联数组。 - Hector Barbossa
就像@HectorBarbossa所说的那样,您将不得不使用对象来完成此操作:{"yourKey": 42.314} - boehm_s
规范格式为 *如何在JavaScript中使用关联数组/哈希表*。 - Peter Mortensen
2个回答

11

JavaScript 没有 "关联数组"。

它有对象,你可以在其中使用命名属性存储值。

它有数组,通过整数属性存储一组有序的值。由于它们是对象类型,因此您也可以在它们上面存储命名值(但不能使用文字语法创建它们,只能在数组创建后添加),但这被认为不是好的实践,并且几乎所有针对数组具有特殊情况处理的内容都会忽略在数组上存储的命名值。

从 ES6 开始,它还有 Map,类似于对象,可以给它们赋予命名值,但也类似于数组,维护元素插入的顺序。没有用于创建 Map 的文字语法。


3

希望避免使用语言特定的功能,例如:

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

为什么不按照语言设计的方式去做呢?

"this is the same" — 这并不相同。数组和对象之间存在许多差异,即使您在它们的每个属性上都放置了一个名为“foo”的属性。 - Quentin
@Quentin,你说得对。我把你的备注添加到我的回答中了。 - webdeb
对我来说,最好使用[],因为我知道我打算像数组一样使用它,而不是像对象一样。即使选择对象会更短,但关键是在创建最终对象(包装器)时让事情变得清晰明了。 - John Boe
@user1141649 — 你计划使用命名键,这不是“像数组”。 - Quentin
@user1141649,你不能像使用数组一样这样使用它,长度仍然为0。例如,请查看编辑。 - webdeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接