2017-06-08 13 views
1

私はプログラミングが初めてで、純粋なjavascriptを使用して多次元配列の問題を解決しましたが、複雑すぎると思っています。あなたにはもっと良い方法があります。 問題は、配列内のすべての数値がconsole.logになり、配列が[[[1,2]、[3,4]]、[[5,6]]]です。私のコードは以下の通りである、あなたの提案を投稿してください、ありがとう多次元配列を並べ替える

 var nestedArr = [[[1,2],[3,4]],[[5,6]]]; 
    var nestedArrOne = nestedArr[0]; 
    var nestedArrTwo = nestedArr[1]; 
    var newArr = nestedArrOne.concat(nestedArrTwo); 
     function showAll(){ 
     for(var i=0; i<newArr.length; i++){ 
     for(var j=0; j<newArr[i].length; j++){ 
     console.log(newArr[i][j]); 
       } 
      } 
     } 

     showAll(); 
+0

これは、 "フラット化" と呼ばれ、これらの部品の周りではない "ソートは";)それを検索します。 – georg

+0

こんにちは@ Sen123私は信じて、[リンク](https://codereview.stackexchange.com/)に質問を投稿する必要があります –

+0

あなたのコードにいくつかの問題がありますが、ここで始めることができます。配列のインデックスでは、次のネストされたレベルではなく、配列内の次のアイテムを取得します。だから 'nestedArr'は' [1,2]、[3,4]、[5,6]]の中に 'nestedArr [0]'という項目を1つだけ持っています - 'nestedArr [1]'は何もありません。 –

答えて

0

あなたは内側の配列のために再び関数を呼び出し、その後、ネストされた配列を反復処理し、アイテムが配列であるかどうかを確認できます。

function iter(array) { 
 
    var i;        // declare index 
 
    for (i = 0; i < array.length; i++) { // iterate array 
 
     if (Array.isArray(array[i])) { // check if item is an array 
 
      iter(array[i]);    // if so, call iter with item 
 
      continue;     // and continue the loop 
 
     } 
 
     console.log(array[i]);   // the wanted output 
 
    } 
 
} 
 

 
var nestedArr = [[[1, 2], [3, 4]], [[5, 6]]]; 
 
iter(nestedArr);

0

再帰関数は、アレイを平坦化するために使用することができます。 "静止オペレータによるパターンマッチング" と空想Haskellesqueアプローチがあり得る

let isArray = val => val.constructor === Array 
 

 
let log = val => console.log(val) 
 

 
let flatten = val => 
 
    val 
 
    .reduce((acc, cur) => 
 
     isArray(cur) ? [...acc, ...flatten(cur)] : [...acc, cur], 
 
     []) 
 

 

 
// Running examples 
 
let arrA = [[[1,2],[3,4]],[[5,6]]] 
 
flatten(arrA).forEach(log) 
 

 
log('-------------------') 
 

 
let arrB = [[[1,2],[3,4]],[[5,6]],[7],[[[[9]]]]] 
 
flatten(arrB).forEach(log)

0

var flat = ([x,...xs]) => x ? [...Array.isArray(x) ? flat(x) : [x], ...flat(xs)] : []; 
 
    na = [[1,2],[3,[4,5]],[6,7,[[[8],9]]],10]; 
 
    fa = flat(na); 
 
console.log(...fa);

関連する問題