46

今では、このループを使用して配列の要素を反復処理しています。これは、さまざまなプロパティを持つオブジェクトをその中に入れても問題なく機能します。

var cubes[];

for (i in cubes){
     cubes[i].dimension
     cubes[i].position_x
     ecc..
}

さて、cubes[] がこのように宣言されているとしましょう

var cubes[][];

JavaScriptでこれを行うことはできますか? どうすれば自動的に反復できますか

cubes[0][0]
cubes[0][1]
cubes[0][2]
cubes[1][0]
cubes[1][1]
cubes[1][2]
cubes[2][0]
ecc...

回避策として、次のように宣言できます。

var cubes[];
var cubes1[];

2 つのアレイを別々に操作します。これはより良い解決策ですか?

4

8 に答える 8

69

次のようなことができます。

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

ワーキングjsFiddle:

上記の出力:

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
于 2012-04-05T02:29:25.560 に答える
22
var cubes = [["string", "string"], ["string", "string"]];

for(var i = 0; i < cubes.length; i++) {
    for(var j = 0; j < cubes[i].length; j++) {
        console.log(cubes[i][j]);
    }
}
于 2012-04-05T02:25:40.110 に答える
8

配列をループする効率的な方法は、組み込みの配列メソッド .map() です。

1 次元配列の場合、次のようになります。

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

2 次元配列の場合:

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

任意の形式の n 次元配列の場合:

Function.prototype.ArrayFunction = function(param) {
  if (param instanceof Array) {
    return param.map( Function.prototype.ArrayFunction, this ) ;
  }
  else return (this)(param) ;
}
HandleOneElement.ArrayFunction(cubes) ;
于 2014-11-30T14:26:26.757 に答える
5

これを試して:

var i, j;

for (i = 0; i < cubes.length; i++) {
    for (j = 0; j < cubes[i].length; j++) {
       do whatever with cubes[i][j];
    }
}
于 2012-04-05T02:25:40.987 に答える
3

または、「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);
  }
});

配列のインデックスが必要な場合は、次のコードを試してください。

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++;
  }
});

結果は次のようになります。

[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
于 2016-05-30T08:41:08.017 に答える
1

JavaScript にはそのような宣言はありません。それはそのようになります:

var cubes = ...

関係なく

しかし、次のことができます。

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

  }
}

JavaScript では、次のようなジャグ配列が許可されていることに注意してください。

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

配列には、任意の長さの配列を含め、任意のタイプのオブジェクトを含めることができるためです。

MDCが指摘したように:

「インデックスの順序が重要な場合、配列を反復処理するために for..in を使用しないでください」

元の構文を使用すると、要素が番号順にアクセスされるという保証はありません。

于 2012-04-05T02:25:00.113 に答える