dynamic array names javascript

与世无争的帅哥 提交于 2019-11-29 10:56:15

If you are doing this in the browser, one possible solution would be to do:

function setArray(a, b, c){
    window['Array' + a][b] = c;
}

setArray('Top', 5, 100);

I would recommend that all your array's be contained in some object and not pollute the global namespace. So it would be more like:

var arrays = {
    ArrayTop: [],
    ArrayNorth: []
};

function setArray(a, b, c){
    arrays['Array' + a][b] = c;
}

setArray('Top', 5, 100);

I would not recommend using eval. Eval is not meant for this kind of dynamic evaluation and it is a huge performance hit.

Hash map will be a perfect tool:

var arrays = {
  top: [],
  left: [],
  right: [],
  bottom: []
};

function addToArray(name, index, value) {
  arrays[name][index] = value;
}

addToArray('top', 5, 100);

I took the liberty to give more explicit names.

I suggest also two good practices:

  • do not use eval. Eval is not meant for this kind of dynamic evaluation. In your case, it's a performance killer

  • do not polute the global namespace. In browser environnement, avoid adding stuff to window (which is global).

Why not indexing your array with an object?

var arrayNames=["top","left","right","bottom"]
var data=[1,2,3,4,5];
var arrays={};

arrayNames.forEach(function(x){
    arrays[x]=data;
});    

So you could get your Array via Name. If you randomize or autogenerate the names, no prob.

You can do it this way:

function setarray(a,b,c){
    window['Array' + a][b] = c;
}

setarray('Top',5,100)

However, you shouldn't be doing this. Use a 2D array or an object or something. The purpose of this answer is just to show that it CAN be done, not that it SHOULD be done.

You missed, that Array has to be a String => "Array". Then you can do

var postfix = "Top"; 
var a = eval("new Array"+postfix);
a.push(100);

try something like this

var someArr = {

};
someArr.ArrayTop = [];

function setarray(a, b, c) {

    var arrName = "Array" + a;
    someArr[arrName][b] = c;
}


setarray('Top', 5, 100)

alert(someArr.ArrayTop[5]);

Hope this works. Here is the fiddle

Put all your arrays into an object:

var myArrays = { 
    top : arrayTop,
    left: arrayLeft,
    right: arrayRight,
    bottom: arrayBottom
}

And the to get an array you can just:

myArrays["top"][5] = 100;

Or you can skip defining the arrays as global variables and just do something like:

var myArrays = { 
    top : [],
    left: [],
    right: [],
    bottom: []
}

Which initializes 4 empty arrays which you can populate:

myArrays["top"][0] = 100;

or

myArrays.top[0] = 100;

However, if top, left, right and bottom all are related (refering to the same object), it might make more sense to create an object with those properties and create a single array of those objects:

function MyObj(top, left, right, bottom) {
   this.top = top;
   this.left = left;
   this.right = right;
   this.bottom = bottom;
}

var myArray = [];

myArray.push(new MyObj(1,2,3,4));
console.log(myArray[0]);

myArray[0].left = 7;
console.log(myArray[0]);

http://jsfiddle.net/UNuF8/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!