【问题标题】:Creating some associative array in JavaScript在 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。

【问题讨论】:

标签: javascript arrays associative-array


【解决方案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,它们与对象相似,您可以为它们指定命名值,但也可以保留该顺序的数组。创建地图没有文字语法。

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 2017-08-02
    • 2015-02-14
    • 1970-01-01
    • 2010-09-25
    • 2015-11-15
    相关资源
    最近更新 更多