时间:2010-11-03 20:15:19

标签: 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;

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

arrayName[eval("nume")] = value;

其中:

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

var nume = '"' + var1 + var2 + '"'; 

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

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

7 个答案:

答案 0 :(得分:22)

起初我认为您不需要真正的数组对象来执行您需要的操作,您可以使用普通对象。

您可以使用括号表示法来使用变量值

来访问属性
var obj = {};
var nume = var1 + var2;
obj[nume] = value;

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

当您需要存储数字索引时,真正的数组很有用,当您为索引分配索引或length一个值时,它们会自动更新其push属性。

答案 1 :(得分:5)

使用arrayName[var1+var2]

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

答案 2 :(得分:5)

您可以使用对象来执行此操作:

var hash = {}
hash["foo"] = "foo";
hash.bar    = "bar";
// This is the dynamic approach: Your key is a string:
baz         = "baz"
hash[baz]   = "hello";

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

答案 3 :(得分:0)

您在寻找variableName = 'bla'+'foo'; arrayRef[variableName] = 'something';吗?

即便如此,您应该使用对象文字。 x = {}; x[variablename] = 'blah';

答案 4 :(得分:0)

你想要一个普通的对象bracket notaiton,如下所示:

var arrayName = {};
arrayName["indexName"] = value;

答案 5 :(得分:0)

确实,不需要一个数组对象,一个简单的对象完成了这个工作;更多的数组引入了在方括号obj["var1 + var2"]中使用引号来访问对象属性的值而不是与索引相关的值的想法(我认为);引号将"var1 + var2"转换为字符串。使用一个简单的对象消除了对引号的需要,所以我可以使用obj[var1 + var2],这是有效的:)

谢谢大家!

答案 6 :(得分:0)

我做了类似跟随的事情;

let parentArray = [];
let childArray = [1, 2, 3];
childArray.name = 'my-array-1';
parentArray.push(childArray);

要在ES6中按名称访问;

parentArray.filter(x => x.name == 'my-array-1');