をフラット化:は、私はこのような配列を平坦に助けが必要なギザギザの多次元配列
[1,2,[2,3],[5,[6,1],4],7]
私は、このような何かを検索し、[].concat.apply
を発見したことが
[1,2,2,3,5,6,1,4,7].
ような何かになりたいです2次元配列だけを扱うことになります。
私はまた、任意のギザギザの多次元配列で動作するアルゴリズムを使用したいと思います。助けてください。 Thx
をフラット化:は、私はこのような配列を平坦に助けが必要なギザギザの多次元配列
[1,2,[2,3],[5,[6,1],4],7]
私は、このような何かを検索し、[].concat.apply
を発見したことが
[1,2,2,3,5,6,1,4,7].
ような何かになりたいです2次元配列だけを扱うことになります。
私はまた、任意のギザギザの多次元配列で動作するアルゴリズムを使用したいと思います。助けてください。 Thx
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 ]
あなたは深くネストされた配列を処理するためのループでconcat.apply
事ラップすることができます:あなたが望むかもしれない
while (a.some(Array.isArray))
a = [].concat(...a);
:
またはES6構文のをあなたが使っているプログラミング言語を教えてください。 – smarx
sry私はjavascript –