我需要有助於展平這樣的數組:拼合鋸齒狀多維數組
[1,2,[2,3],[5,[6,1],4],7]
我希望它是這樣的
[1,2,2,3,5,6,1,4,7].
...我已經尋找這樣的事情,並發現[].concat.apply
,但它只會照顧二維數組。
我也想使用適用於任何鋸齒狀多維數組的算法。請幫忙。 Thx
我需要有助於展平這樣的數組:拼合鋸齒狀多維數組
[1,2,[2,3],[5,[6,1],4],7]
我希望它是這樣的
[1,2,2,3,5,6,1,4,7].
...我已經尋找這樣的事情,並發現[].concat.apply
,但它只會照顧二維數組。
我也想使用適用於任何鋸齒狀多維數組的算法。請幫忙。 Thx
我的建議是依賴lodash並使用flattenDeep
函數。
_.flattenDeep([1,2,[2,3],[5,[6,1],4],7])
// [ 1, 2, 2, 3, 5, 6, 1, 4, 7 ]
如果您想編寫自己的函數,您可能需要查看lodash實現。
在僞代碼,這裏是一個遞歸方法:
result = []
function flatten(array)
for each element in array
if element is array
flatten(element)
else
result.append(element)
編輯
這裏有一個「通過手」的方式,但我肯定會推薦依靠更好的測試lodash實現。
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.apply([], a)
或ES6語法:
while (a.some(Array.isArray))
a = [].concat(...a);
你可能想告訴我們你正在使用什麼編程語言。 – smarx
sry我的意思是javascript –