dynamic array names javascript

后端 未结 7 817
南笙
南笙 2020-12-19 07:25

I have a few arrays with like names.

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

I am trying to set the name dynamically in a f

相关标签:
7条回答
  • 2020-12-19 08:06

    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

    0 讨论(0)
  • 2020-12-19 08:07

    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.

    0 讨论(0)
  • 2020-12-19 08:11

    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);
    
    0 讨论(0)
  • 2020-12-19 08:12

    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.

    0 讨论(0)
  • 2020-12-19 08:12

    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/

    0 讨论(0)
  • 2020-12-19 08:13

    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.

    0 讨论(0)
提交回复
热议问题