3

JavaScript で多次元配列を反復処理し、配列内の各要素を出力しようとしています。ネストされた for ループを使用せずに多次元配列の各要素を出力する方法はありますか?

http://jsfiddle.net/mKsDW/

var arr = [[1, 5],[7, 4]];
for(var i in arr){
    alert(i); //this displays "0", then displays "1",
    //instead of printing each element in the array
    //how can I make it print each element in each 2D array instead,
    //without using nested for-loops for each dimension of the array?
}
4

2 に答える 2

16

問題は、任意の深さのネストがある可能性があることです。その場合は、再帰関数を使用してください。

function printArray(arr) {
    for (var i = 0; i < arr.length; i++)
        if (Array.isArray(arr[i]))
            printArray(arr[i])
        else
            console.log(arr[i])
}

古いブラウザーのArray.isArray場合は shim が必要です。

if (!Array.isArray)
    Array.isArray = function(o) {
        return !!o && Object.prototype.toString.call(o) === "[object Array]"
    }
于 2013-04-06T18:26:30.193 に答える
6

ネストされたループを使用したくない場合は、配列をフラットにするか、再帰関数を使用できます。何かのようなもの:

arr.forEach(function each(item) {
  if (Array.isArray(item))
    item.forEach(each);
  else
    console.log(item)
});
于 2013-04-06T18:29:53.603 に答える