2016-07-31 70 views
0

我需要有助於展平這樣的數組:拼合鋸齒狀多維數組

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

我希望它是這樣的

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

...我已經尋找這樣的事情,並發現[].concat.apply,但它只會照顧二維數組。

我也想使用適用於任何鋸齒狀多維數組的算法。請幫忙。 Thx

+0

你可能想告訴我們你正在使用什麼編程語言。 – 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實現。

在僞代碼,這裏是一個遞歸方法:

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 ]

+0

thx,但這個問題涉及到網站上的問題。我只能用香草解決它javascript –

+0

@nova_n爲什麼你不能使用lodash? – smarx

+0

只需在您的HTML的「」部分添加''。 – smarx

0

您可以包裝concat.apply的事情在一個循環處理深度嵌套的數組:

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

或ES6語法:

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