我正在尝试创建一个关联数组,创建一个空数组,然后添加一个(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()
);如果我正在尝试的方式是死路一条,还有另一种方法可以使关联数组值的索引名称动态化吗?
答案 0 :(得分:22)
起初我认为您不需要真正的数组对象来执行您需要的操作,您可以使用普通对象。
您可以使用括号表示法来使用变量值
来访问属性var obj = {};
var nume = var1 + var2;
obj[nume] = value;
数组只是对象,“关联数组”的概念可以通过使用简单对象来实现,对象是包含值的属性集合。
当您需要存储数字索引时,真正的数组很有用,当您为索引分配索引或length
一个值时,它们会自动更新其push
属性。
答案 1 :(得分:5)
使用arrayName[var1+var2]
请注意,arrayName.var
与arrayName["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');