variable as index in an associative array - Javasc

2019-03-12 00:33发布

I'm trying to create an associative array, create an empty array, and then add a (indexName -> value) pair:

var arrayName = new Array;

arrayName["indexName"] = value;

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

arrayName.indexName = value;

When I assign the value to the indexName I want indexName to be dynamic and the value of a variable. So I tried this:

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

Where:

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

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

but: alert(arrayName["indexName"]); doesn't return "value"... it says "undefined"

Is there something I’m missing? (I’m not familiar with eval() ); if the way I’m trying is a dead end, is there another way to make the index name of the associative array value dynamic?

7条回答
可以哭但决不认输i
2楼-- · 2019-03-12 00:53

You would use objects to do that:

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

To iterate, just use a for loop or $.each() in jQuery.

查看更多
地球回转人心会变
3楼-- · 2019-03-12 00:54

I did something like like following;

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

To access that by name in ES6;

parentArray.filter(x => x.name == 'my-array-1');
查看更多
倾城 Initia
4楼-- · 2019-03-12 00:57

You want a plain object with the same bracket notaiton here, like this:

var arrayName = {};
arrayName["indexName"] = value;
查看更多
别忘想泡老子
5楼-- · 2019-03-12 00:57

Indeed, there was no need for an array object, a simple object did the job; further more an array introduced the need to use quotes inside the square brackets obj["var1 + var2"] to access the object property's value and not the value associated with an index (i think); the quotes transformed "var1 + var2" into a string. Using a simple object eliminated the need for quotes, so I can use obj[var1 + var2], wich worked :)

Thanks everyone !

查看更多
The star\"
6楼-- · 2019-03-12 00:59

use arrayName[var1+var2]

Note that arrayName.var is the same as arrayName["var"] -- it's just syntactic sugar. The second form is mostly used when dealing with the kind of problems that you are facing - dynamic object keys, and keys that are not alphanumeric (think of arrayName[".eval()"]; this is a perfectly legal object key that has nothing to do with the javascript eval() function)

查看更多
放我归山
7楼-- · 2019-03-12 01:08

At first I don't think you need a real array object to do what you need, you can use a plain object.

You can simply use the bracket notation to access a property, using the value of a variable:

var obj = {};
var nume = var1 + var2;
obj[nume] = value;

Array's are simply objects, the concept of an "associative array" can be achieved by using a simple object, objects are collections of properties that contain values.

True arrays are useful when you need to store numeric indexes, they automatically update their length property when you assign an index or you push a value to it.

查看更多
登录 后发表回答