For loop in multidimensional javascript array

前端 未结 8 1469
我在风中等你
我在风中等你 2020-11-28 21:28

Since now, I\'m using this loop to iterate over the elements of an array, which works fine even if I put objects with various properties inside of it.

var cu         


        
相关标签:
8条回答
  • 2020-11-28 22:00

    Or you can do this alternatively with "forEach()":

    var cubes = [
     [1, 2, 3],
     [4, 5, 6],    
     [7, 8, 9],
    ];
    
    cubes.forEach(function each(item) {
      if (Array.isArray(item)) {
        // If is array, continue repeat loop
        item.forEach(each);
      } else {
        console.log(item);
      }
    });
    

    If you need array's index, please try this code:

    var i = 0; j = 0;
    
    cubes.forEach(function each(item) {
      if (Array.isArray(item)) {
        // If is array, continue repeat loop
        item.forEach(each);
        i++;
        j = 0;
      } else {
        console.log("[" + i + "][" + j + "] = " + item);
        j++;
      }
    });
    

    And the result will look like this:

    [0][0] = 1
    [0][1] = 2
    [0][2] = 3
    [1][0] = 4
    [1][1] = 5
    [1][2] = 6
    [2][0] = 7
    [2][1] = 8
    [2][2] = 9
    
    0 讨论(0)
  • 2020-11-28 22:01

    Try this:

    var i, j;
    
    for (i = 0; i < cubes.length; i++) {
        for (j = 0; j < cubes[i].length; j++) {
           do whatever with cubes[i][j];
        }
    }
    
    0 讨论(0)
  • 2020-11-28 22:02

    You can do something like this:

    var cubes = [
     [1, 2, 3],
     [4, 5, 6],    
     [7, 8, 9],
    ];
    
    for(var i = 0; i < cubes.length; i++) {
        var cube = cubes[i];
        for(var j = 0; j < cube.length; j++) {
            display("cube[" + i + "][" + j + "] = " + cube[j]);
        }
    }
    

    Working jsFiddle:

    • http://jsfiddle.net/TRR4n/

    The output of the above:

    cube[0][0] = 1
    cube[0][1] = 2
    cube[0][2] = 3
    cube[1][0] = 4
    cube[1][1] = 5
    cube[1][2] = 6
    cube[2][0] = 7
    cube[2][1] = 8
    cube[2][2] = 9
    
    0 讨论(0)
  • 2020-11-28 22:07

    JavaScript does not have such declarations. It would be:

    var cubes = ...
    

    regardless

    But you can do:

    for(var i = 0; i < cubes.length; i++)
    {
      for(var j = 0; j < cubes[i].length; j++)
      {
    
      }
    }
    

    Note that JavaScript allows jagged arrays, like:

    [
      [1, 2, 3],
      [1, 2, 3, 4]
    ]
    

    since arrays can contain any type of object, including an array of arbitrary length.

    As noted by MDC:

    "for..in should not be used to iterate over an Array where index order is important"

    If you use your original syntax, there is no guarantee the elements will be visited in numeric order.

    0 讨论(0)
  • 2020-11-28 22:11

    An efficient way to loop over an Array is the built-in array method .map()

    For a 1-dimensional array it would look like this:

    function HandleOneElement( Cuby ) {
       Cuby.dimension
       Cuby.position_x
       ...
    }
    cubes.map(HandleOneElement) ; // the map function will pass each element
    

    for 2-dimensional array:

    cubes.map( function( cubeRow ) { cubeRow.map( HandleOneElement ) } )
    

    for an n-dimensional array of any form:

    Function.prototype.ArrayFunction = function(param) {
      if (param instanceof Array) {
        return param.map( Function.prototype.ArrayFunction, this ) ;
      }
      else return (this)(param) ;
    }
    HandleOneElement.ArrayFunction(cubes) ;
    
    0 讨论(0)
  • 2020-11-28 22:13

    A bit too late, but this solution is nice and neat

    const arr = [[1,2,3],[4,5,6],[7,8,9,10]]
    for (let i of arr) {
      for (let j of i) {
        console.log(j) //Should log numbers from 1 to 10
      }
    }
    

    Or in your case:

    const arr = [[1,2,3],[4,5,6],[7,8,9]]
    for (let [d1, d2, d3] of arr) {
      console.log(`${d1}, ${d2}, ${d3}`) //Should return numbers from 1 to 9
    }
    

    Note: for ... of loop is standardised in ES6, so only use this if you have an ES5 Javascript Complier (such as Babel)

    Another note: There are alternatives, but they have some subtle differences and behaviours, such as forEach(), for...in, for...of and traditional for(). It depends on your case to decide which one to use. (ES6 also has .map(), .filter(), .find(), .reduce())

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