变量作为关联数组中的索引 - Javascript

bog*_*dan 24 javascript associative-array

我正在尝试创建一个关联数组,创建一个空数组,然后添加一个(indexName- >值)对:

var arrayName = new Array;

arrayName["indexName"] = value;

// i know i can also do the last line like this:

arrayName.indexName = value;
Run Code Online (Sandbox Code Playgroud)

当我将值分配给indexName我想要indexName动态和变量的值时.所以我尝试了这个:

arrayName[eval("nume")] = value;
Run Code Online (Sandbox Code Playgroud)

哪里:

var var1 = "index";
var var2 = "Name";

var nume = '"' + var1 + var2 + '"'; 
Run Code Online (Sandbox Code Playgroud)

但是:alert(arrayName["indexName"]);没有返回"价值"......它说"未定义"

有什么我想念的吗?(我不熟悉eval()); 如果我正在尝试的方式是死路一条,还有另一种方法可以使关联数组值的索引名称动态化吗?

CMS*_*CMS 22

起初我认为你不需要一个真正的数组对象来做你需要的东西,你可以使用一个普通的对象.

您可以使用括号表示法使用变量的值来访问属性:

var obj = {};
var nume = var1 + var2;
obj[nume] = value;
Run Code Online (Sandbox Code Playgroud)

数组只是对象,"关联数组"的概念可以通过使用简单对象来实现,对象是包含值的属性的集合.

当您需要存储数字索引时,真实数组非常有用,它们会length在您分配索引或为其指定push值时自动更新其属性.


Gab*_*aru 5

使用 arrayName[var1+var2]

请注意,arrayName.var是一样的arrayName["var"]-它只是语法糖.第二种形式主要用于处理您所面临的问题 - 动态对象键和不是字母数字的键(想想arrayName[".eval()"];这是一个完全合法的对象键,与javascript eval()函数无关)


bal*_*alu 5

你会使用对象来做到这一点:

var hash = {}
hash["foo"] = "foo";
hash.bar    = "bar";
// This is the dynamic approach: Your key is a string:
baz         = "baz"
hash[baz]   = "hello";
Run Code Online (Sandbox Code Playgroud)

要迭代,只需使用for循环或$.each()jQuery.