[英]variable as index in an associative array - Javascript
我正在尝试创建一个关联数组,创建一个空数组,然后添加一个( indexName
- > value)对:
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()
); 如果我正在尝试的方式是死路一条,还有另一种方法可以使关联数组值的索引名称动态化吗?
起初我认为你不需要一个真正的数组对象来做你需要的东西,你可以使用一个普通的对象。
您可以使用括号表示法使用变量的值来访问属性:
var obj = {};
var nume = var1 + var2;
obj[nume] = value;
数组只是对象,“关联数组”的概念可以通过使用简单对象来实现,对象是包含值的属性的集合。
当您需要存储数字索引时,真实数组非常有用,当您分配索引或向其push
值时,它们会自动更新其length
属性。
使用arrayName[var1+var2]
请注意, arrayName.var
与arrayName["var"]
- 它只是语法糖。 第二种形式主要用于处理您所面临的问题 - 动态对象键和不是字母数字的键(想到arrayName[".eval()"]
;这是一个完全合法的对象键,与javascript eval()
函数无关)
你会使用对象来做到这一点:
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()
。
你在寻找variableName = 'bla'+'foo'; arrayRef[variableName] = 'something';
variableName = 'bla'+'foo'; arrayRef[variableName] = 'something';
?
即便如此,您应该使用对象文字。 x = {}; x[variablename] = 'blah';
你想要一个普通的对象,这里有相同的括号notaiton ,如下所示:
var arrayName = {};
arrayName["indexName"] = value;
实际上,不需要一个数组对象,一个简单的对象完成了这个工作; 更多的数组引入了在方括号obj["var1 + var2"]
使用引号来访问对象属性的值而不是与索引相关的值的想法(我认为); 引号将"var1 + var2"
转换为字符串。 使用一个简单的对象消除了引号的需要,所以我可以使用obj[var1 + var2]
,工作:)
感谢大家 !
我做了类似跟随的事情;
let parentArray = [];
let childArray = [1, 2, 3];
childArray.name = 'my-array-1';
parentArray.push(childArray);
在ES6中按名称访问;
parentArray.filter(x => x.name == 'my-array-1');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.