Declare an empty two-dimensional array in Javascript?

后端 未结 18 1366
暖寄归人
暖寄归人 2020-11-29 21:45

I want to create a two dimensional array in Javascript where I\'m going to store coordinates (x,y). I don\'t know yet how many pairs of coordinates I will have because they

相关标签:
18条回答
  • 2020-11-29 22:31

    I know this is an old thread but I'd like to suggest using an array of objects rather than an array of arrays. I think it make the code simpler to understand and update.

    // Use meaningful variable names like 'points', 
    // anything better than a bad pirate joke, 'arr'!
    var points = [];
    
    // Create an object literal, then add it to the array
    var point = {x: 0, y: 0};
    points.push(point);
    
    // Create and add the object to the array in 1 line
    points.push({x:5, y:5});
    
    // Create the object from local variables 
    var x = 10;
    var y = 8;
    points.push({x, y});
    
    // Ask the user for a point too
    var response = prompt("Please enter a coordinate point. Example: 3,8");
    var coords = response.split(",").map(Number);
    points.push({x: coords[0], y: coords[1]});
    
    // Show the results
    var canvas = document.getElementById('graph');
    var painter = canvas.getContext("2d");
    var width = canvas.width, height = canvas.height;
    var scale = 10, radius = 3.5, deg0 = 0, deg360 = 2 * Math.PI;
    
    painter.beginPath();
    for (var point of points) {
        var x = point.x * scale + scale;
        var y = height - point.y * scale - scale;
        painter.moveTo(x + radius, y);
        painter.arc(x, y, radius, deg0, deg360);
        painter.fillText(`${point.x}, ${point.y}`, x + radius + 1, y + radius + 1);
    }
    painter.stroke();
    <canvas id="graph" width="150" height="150" style="border: 1px solid red;"></canvas>

    0 讨论(0)
  • 2020-11-29 22:32

    If you want to be able access the matrix like so matrix[i][j]

    I find it the most convinient to init it in a loop.

    var matrix = [],
        cols = 3;
    
    //init the grid matrix
    for ( var i = 0; i < cols; i++ ) {
        matrix[i] = []; 
    }
    

    this will give you [ [], [], [] ]

    so matrix[0][0] matrix[1][0] return undefined and not the error "Uncaught TypeError: Cannot set property '0' of undefined"

    0 讨论(0)
  • 2020-11-29 22:32
    const grid = Array.from(Array(3), e => Array(4));
    

    Array.from(arrayLike, mapfn)

    mapfn is called, being passed the value undefined, returning new Array(4).

    An iterator is created and the next value is repeatedly called. The value returned from next, next().value is undefined. This value, undefined, is then passed to the newly-created array's iterator. Each iteration's value is undefined, which you can see if you log it.

    var grid2 = Array.from(Array(3), e => {
      console.log(e); // undefined
      return Array(4); // a new Array.
    });
    
    0 讨论(0)
  • 2020-11-29 22:34

    An empty array is defined by omitting values, like so:

    v=[[],[]]
    a=[]
    b=[1,2]
    a.push(b)
    b==a[0]
    
    0 讨论(0)
  • 2020-11-29 22:38

    You can fill an array with arrays using a function:

    var arr = [];
    var rows = 11;
    var columns = 12;
    
    fill2DimensionsArray(arr, rows, columns);
    
    function fill2DimensionsArray(arr, rows, columns){
        for (var i = 0; i < rows; i++) {
            arr.push([0])
            for (var j = 0; j < columns; j++) {
                arr[i][j] = 0;
            }
        }
    }
    

    The result is:

    Array(11)
    0:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    1:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    2:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    3:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    4:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    5:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    6:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    7:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    8:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    9:(12) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    10:(12)[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    

    0 讨论(0)
  • 2020-11-29 22:39

    ES6

    Matrix m with size 3 rows and 5 columns (remove .fill(0) to not init by zero)

    [...Array(3)].map(x=>Array(5).fill(0))       
    

    let Array2D = (r,c) => [...Array(r)].map(x=>Array(c).fill(0));
    
    let m = Array2D(3,5);
    
    m[1][0] = 2;  // second row, first column
    m[2][4] = 8;  // last row, last column
    
    // print formated array
    console.log(JSON.stringify(m)
      .replace(/(\[\[)(.*)(\]\])/g,'[\n  [$2]\n]').replace(/],/g,'],\n  ')
    );

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