2013-05-12 88 views
2

在JavaScript中,是否可以使用分隔符將每個字符串拆分爲多維字符串數組?我想使用字符串分隔符來分割多維字符串數組,但我還不知道如何在不使用多個for循環的情況下迭代多維數組。使用分隔符分割字符串數組

var theArray = [["Split,each"],["string, in"],["this, array"]]; 

據我所知,這是不可能的string.split(",")方法應用到多維數組。我需要找到一個解決辦法,因爲這個代碼是無效的:

alert([["Split,each"],["string, in"],["this","array"]].split(",")); 
+3

你的結果是什麼?由3個數組組成的數組,還是由6個字符串組成的數組? – 2013-05-12 03:17:01

+0

@MichaelBerkowski結果應該是一個由3個數組組成的數組,其中每個數組都是一個字符串數組。 – 2013-05-12 03:18:26

+1

@AndersonGreen數組中的最後一項應該是兩個單獨的字符串的數組,或者是偶然的? – 2013-05-12 03:25:28

回答

5

使用數組map方法來回報您的陣列的修改版本:

var newArray = theArray.map(function(v,i,a){ 
    return v[0].split(","); 
}); 

函數傳遞因爲map方法的參數用於確定映射數組中的值。正如你所看到的,該函數將獲取數組中的每個值,並以逗號分隔它,並返回兩個字符串的結果數組。

的輸出是:

[["Split", "each"],["string", "in"],["this", "array"]]; 

爲了使這項工作遞歸任意深度的數組,你可以使用:

var newArray = theArray.map(function mapper(v,i,a){ 
    if(typeof v == "string"){ 
     return v.split(","); 
    } else { 
     return v.map(mapper); 
    } 
}); 
+0

不需要包含'i'和'a',它們是多餘的變量。此外,在IE <9. – 2013-05-12 03:19:21

+0

@ElliotBonneville版本中不支持'map'是的,添加了習慣。 – 2013-05-12 03:21:27

+0

我不斷收到錯誤'Uncaught TypeError:Object [object Array] has no method'split'' http://jsfiddle.net/4Psmt/ – 2013-05-12 03:21:37

3

爲此,可以使用傳統的for循環做:

var theArray = [["Split,each"],["string, in"],["this","array"]]; 

for(var i = 0; i<theArray.length; i++) { 
    theArray[i] = theArray[i].split(","); 
} 

我會避開使用map方法it doesn't have great support。 (IE < 9不支持)

+0

這不適用於任何維度的多維數組。它只適用於二維數組。 – 2013-05-12 03:20:55

+0

您只提供了一個2維數組的示例。使用遞歸遍歷多維數組。我將在我的答案中提供這種技術的一個例子。 – 2013-05-12 03:21:51

+0

我還沒有在這裏看到遞歸迭代技術。這部分是否還在進行中? – 2013-05-12 15:07:08