2013-02-26 42 views
3

我想寫一個函數來壓扁數組。我有一部分功能在工作,我需要另一半的幫助。javascript:試圖壓扁數組只有一個級別

flatten: function(anyArray, singleLevel) { 
    if (singleLevel == true) { 
     flatArray = Array.prototype.concat.apply([], anyArray); 
     return flatArray; 
    } 
    flatArray = Array.prototype.concat.apply([], anyArray); 
    if (flatArray.length != anyArray.length) { 
     flatArray = someObject.array.flatten(flatArray); 
    } 
    return flatArray; 
} 

如果I型

.flatten([[[1],[1,2,3,[4,5],4],[2,3]]], true); 

我希望它弄平只有一層:

[[1],[1,2,3,[4,5],4],[2,3]] 
+0

我不認爲多層次扁平作品' – Bergi 2013-02-26 21:25:58

回答

2

concat array method期望一個或多個陣列作爲參數,其元素將被附加:

[1].concat([2, 3], [4]) // [1, 2, 3, 4] 

所以,如果你正在使用apply,這將拉平另一個層面:

[].concat.apply([1], [[2], [3]]) // === [1].concat([2], [3]) 

所以,你既可以使用push代替concat,或call(或只是直接調用),而不是apply只得到一個平整的水平。

0

如果使用ES6/ES2015,則可以使用spread運算符。如預期的陣列,如`[[[[[1]]]]]像這樣

console.log(...[[[1],[1,2,3,[4,5],4],[2,3]]])