2016-07-31 9 views
0

をフラット化:は、私はこのような配列を平坦に助けが必要なギザギザの多次元配列

[1,2,[2,3],[5,[6,1],4],7] 

私は、このような何かを検索し、[].concat.applyを発見したことが

[1,2,2,3,5,6,1,4,7]. 

ような何かになりたいです2次元配列だけを扱うことになります。

私はまた、任意のギザギザの多次元配列で動作するアルゴリズムを使用したいと思います。助けてください。 Thx

+0

while (a.some(Array.isArray)) a = [].concat.apply([], a) 

またはES6構文のをあなたが使っているプログラミング言語を教えてください。 – smarx

+0

sry私はjavascript –

答えて

0

lodashに依存し、flattenDeep機能を使用することをお勧めします。

_.flattenDeep([1,2,[2,3],[5,[6,1],4],7]) 
// [ 1, 2, 2, 3, 5, 6, 1, 4, 7 ] 

独自の関数を記述したい場合は、lodashの実装を覗いてみてください。擬似コードで

は、ここでは、再帰的なアプローチだ:私は間違いなく良い-テストlodashに頼ってお勧めしますけれども

result = [] 
function flatten(array) 
    for each element in array 
    if element is array 
     flatten(element) 
    else 
     result.append(element) 

EDIT

はここで、 "バイ・手" アプローチです実装。

function flatten(arr, result) { 
 
    if (result === undefined) { 
 
    result = []; 
 
    } 
 

 
    for (var i = 0; i < arr.length; i++) { 
 
    if (Array.isArray(arr[i])) { 
 
     flatten(arr[i], result); 
 
    } else { 
 
     result.push(arr[i]); 
 
    } 
 
    } 
 

 
    return result; 
 
} 
 

 
console.log(flatten([1, 2, [2, 3], [5, [6, 1], 4], 7])); 
 

 
// Output: 
 
// [ 1, 2, 2, 3, 5, 6, 1, 4, 7 ]

+0

thxを意味しましたが、この質問はウェブサイトの問題に関連しています。私はバニラのjavascriptでそれを解決することができます –

+0

@nova_nなぜロダッシュを使用できませんか? – smarx

+0

HTMLの ''セクションに ''を追加するだけです。 – smarx

0

あなたは深くネストされた配列を処理するためのループでconcat.apply事ラップすることができます:あなたが望むかもしれない

while (a.some(Array.isArray)) 
    a = [].concat(...a); 
関連する問題