我有一些名字相同的数组。
ArrayTop[]
ArrayLeft[]
ArrayRight[]
ArrayWidth[]
我正在尝试在函数中动态设置名称,然后设置值。
我尝试了很多动态选择正确数组的方法,但还没有提出解决方案。
function setarray(a,b,c){
eval(Array+a+[b])=c
}
setarray('Top',5,100)
在这个例子中,我试图设置。
ArrayTop[5]=100
答案 0 :(得分:3)
如果您在浏览器中执行此操作,可以采用以下方法:
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并不适用于这种动态评估,而且是一个巨大的性能影响。
答案 1 :(得分:2)
哈希地图将是一个完美的工具:
var arrays = {
top: [],
left: [],
right: [],
bottom: []
};
function addToArray(name, index, value) {
arrays[name][index] = value;
}
addToArray('top', 5, 100);
我冒昧地给出更明确的名字。
我还建议两个好的做法:
不要使用eval。 Eval不适用于这种动态评估。在你的情况下,它是一个性能杀手
不要对全局命名空间进行规范。在浏览器环境中,避免向窗口添加内容(这是全局的)。
答案 2 :(得分:1)
为什么不用对象索引数组?
var arrayNames=["top","left","right","bottom"]
var data=[1,2,3,4,5];
var arrays={};
arrayNames.forEach(function(x){
arrays[x]=data;
});
所以你可以通过名字获得你的数组。 如果你随机化或自动生成名称,没有概率。
答案 3 :(得分:0)
你可以这样做:
function setarray(a,b,c){
window['Array' + a][b] = c;
}
setarray('Top',5,100)
但是,你不应该这样做。使用2D数组或对象等。这个答案的目的只是为了表明它可以完成,而不是它应该完成。
答案 4 :(得分:0)
将所有数组放入对象中:
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;
但是,如果top
,left
,right
和bottom
都是相关的(引用同一个对象),那么创建一个对象可能更有意义那些属性并创建这些对象的单个数组:
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]);
答案 5 :(得分:0)
你错过了,那个数组必须是一个String => "阵列&#34 ;. 然后就可以了
var postfix = "Top";
var a = eval("new Array"+postfix);
a.push(100);
答案 6 :(得分:0)
尝试这样的事情
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]);
希望这有效。 这是fiddle