2013-05-12 5 views
2

В JavaScript можно разбить каждую строку в многомерном массиве строк с помощью разделителя? Я пытаюсь разбить многомерный массив строк, используя разделитель строк, но я еще не знаю, как перебирать многомерный массив без использования нескольких for-loops.Разделить массив строк с помощью разделителя

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

Насколько я знаю, это не представляется возможным применить метод string.split(",") для многомерного массива. Мне нужно найти обходной путь, поскольку этот код не действует:

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

И каков должен быть ваш результат? Массив из 3 массивов или массив из 6 строк? –

+0

@MichaelBerkowski В результате должен быть массив из 3 массивов, где каждый из 3 массивов представляет собой массив строк. –

+1

@AndersonGreen. Последняя запись в массиве должна быть массивом из двух отдельных строк, или это случайно? –

ответ

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', они являются избыточными переменными. Кроме того, 'map' не поддерживается в версиях IE <9. –

+0

@ElliotBonneville Да, добавлены те из привычки. –

+0

Я продолжаю получать ошибку 'Uncaught TypeError: Object [object Array] не имеет метода 'split'' http://jsfiddle.net/4Psmt/ –

3

Вы можете сделать это, используя традиционный цикл:

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

Это не работает для многомерных массивов любого измерения. Он работает только для двумерных массивов. –

+0

Вы только представили пример с 2-мерным массивом. Используйте рекурсию для итерации через многомерные массивы. Я приведу пример этой техники в своем ответе. –

+0

Я до сих пор не вижу здесь рекурсивной итерационной техники. Эта часть все еще работает? –

Смежные вопросы