2014-04-18 53 views
2

我有一個巨大的多維數組,我想轉換成單維數組,真正的問題是數組是動態的,它可以是一個儘可能地深入,而且我不能提前確定。張貼在這裏的示例如何將深度多維數組轉換爲單維數組 - Javascript

var myArray = [ 
     "hello", 
     ["berries", "grouped", 88, "frozen"], 
     [ 
      "stuff", 
      [ 
       "mash", 
       ["melon", "freeze", 12, "together"], 
       "people" 
      ], 
      "car" 
     ], 
     [ 
      "orange", 
      "code", 
      84, 
      ["mate", "women", "man"] 
     ], 
     ["bus", "car", 345, "lorry"], 
     "world" 
    ]; 

應當轉換爲一維陣列狀

["hello","berries","grouped",88,"frozen","stuff","....."] 
+1

的解決方案應該怎麼樣子的呢? – maja

+0

編輯我的問題 –

回答

4

您可以編寫一個函數學步車:

function walkLeaves(arr, fn) 
{ 
    for (var i = 0; i < arr.length; ++i) { 
     if (typeof arr[i] == 'object' && arr[i].length) { // simple array check 
      walkLeaves(arr[i], fn); 
     } else { 
      fn(arr[i], i); // only collect leaves 
     } 
    } 
} 

,然後用它來建立最終的數組:

var final = []; 
walkLeaves(arr, function(item, index) { 
    final.push(item); 
}); 

Demo

5

只是嘗試:

var flat = myArray.join().split(','); 

輸出:

["hello", "berries", "grouped", "88", "frozen", "stuff", "mash", "melon", "freeze", "12", "together", "people", "car", "orange", "code", "84", "mate", "women", "man", "bus", "car", "345", "lorry", "world"] 
+0

我怎麼可以這樣一個傻瓜..真棒 –

+3

但這不是防彈的,因爲內容可能包含逗號 – maja

+1

它也將項目更改爲字符串,即'int(88)'成爲'字符串(「88」)' –

1

不是純粹的JavaScript解決方案,但你可以使用underscore.js

_.flatten(myArray) 

...和this is how they do it

var flatten = function(input, shallow, output) { 
    if (shallow && _.every(input, _.isArray)) { 
     return concat.apply(output, input); 
    } 
    each(input, function(value) { 
     if (_.isArray(value) || _.isArguments(value)) { 
     shallow ? push.apply(output, value) : flatten(value, shallow, output); 
     } else { 
     output.push(value); 
     } 
    }); 
    return output; 
    }; 
0

正常循環+遞歸:

var flattened = []; 
function flatten(a){ 
    a.forEach(function(e){ 
     if(toString.call(e) === "[object Array]") flatten(e); 
     else flattened.push(e); 
    }); 
} 

flatten(myArray); 
相關問題