繁体   English   中英

动态数组名称javascript

[英]dynamic array names javascript

我有一些名字相似的数组。

ArrayTop[]  
ArrayLeft[]   
ArrayRight[]  
ArrayWidth[]

我试图在函数中动态设置名称,然后设置值。

我已经尝试了很多动态选择正确数组的方法,但还没有提出解决方案。

function setarray(a,b,c){
    eval(Array+a+[b])=c
}

setarray('Top',5,100)

在这个例子中,我试图设置。

ArrayTop[5]=100

如果您在浏览器中执行此操作,可能的解决方案是:

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

setArray('Top', 5, 100);

我建议你的所有数组都包含在某个对象中,而不是污染全局命名空间。 所以它更像是:

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

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

setArray('Top', 5, 100);

我不建议使用eval。 Eval不适用于这种动态评估,而且是一个巨大的性能影响。

哈希地图将是一个完美的工具:

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

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

addToArray('top', 5, 100);

我冒昧地给出更明确的名字。

我还建议两个好的做法:

  • 不要使用eval。 Eval不适用于这种动态评估。 在你的情况下,它是一个性能杀手

  • 不要对全局命名空间进行规范。 在浏览器环境中,避免向窗口添加内容(这是全局的)。

为什么不用对象索引数组?

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

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

所以你可以通过名字获得你的数组。 如果你随机化或自动生成名称,没有概率。

你可以这样做:

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

setarray('Top',5,100)

但是,你不应该这样做。 使用2D数组或对象等。 这个答案的目的只是为了表明它可以完成,而不是它应该完成。

将所有数组放入对象:

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

你可以得到一个阵列:

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

或者您可以跳过将数组定义为全局变量,并执行以下操作:

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

其中初始化了4个可以填充的空数组:

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

要么

myArrays.top[0] = 100;

但是,如果topleftrightbottom都是相关的(引用同一个对象),则创建具有这些属性的对象并创建这些对象的单个数组可能更有意义:

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/

您错过了,Array必须是String =>“Array”。 那你可以做

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

尝试这样的事情

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]);

希望这有效。 这是小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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