繁体   English   中英

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

[英]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.vararrayName["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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM