2015-08-28 3 views
1

У меня есть функция, которая иногда генерирует вложенный массив (для целей multiPolygon). Это может выглядеть так:Поиск каждого первого массива в вложенном массиве

[ 
    [ 
    [ 10.0, 59.0], 
    [ 10.0, 59.0], 
    [ 10.0, 59.0] 
    ], 
    [ 
    [ 10.0, 59.0], 
    [ 10.0, 59.0], 
    [ 10.0, 59.0] 
    ] 
] 

Таким образом, он может возвращать вложенный массив с несколькими вложенными массивами внутри. Но я хочу сделать Shure, что я только получить первый вложенный массив, как это:

[ 
    [ 
    [ 10.0, 59.0], 
    [ 10.0, 59.0], 
    [ 10.0, 59.0] 
    ] 
] 

Im развивается в NodeJS.

+1

так возвращать только один вложенный массив в функции у вас есть? Что вы пробовали до сих пор? – smnbbrv

+0

Я сделал это сейчас, и это сработало для моего случая: while (Array.isArray (nestedArray [0] [0])) {nestedArray = nestedArray [0]; } – tskippe

+0

на самом деле все, что вам нужно было сделать, это: 'originalArray.length = 1;' –

ответ

3

Простая функция повторения, которая ищет другие массивы, решает ее. Он работает с бесконечно вложенными массивами и использует защиту типа объекта.

function getFirstArray(array){ 
    var hasArrays = false; 
    for (i in array) { 
    if(typeof(array[i]) == "object"){ 
     return getFirstArray(array[i]); 
     hasArrays = true; 
     break; 
    } 
    } 
    if(!(hasArrays)){ 
    return array; 
    } 
} 

Затем использовать его просто как:

var firstArray = getFirstArray(matrix); 
console.log(firstArray); 

Надеется, что это помогает :)

0

Пройдите через массивы, а затем выведите yourArray [0] для вывода первого элемента. Я считаю, что это должно сработать.

+0

Но как я прохожу через вложенный массив, когда я не знаю, сколько вложенных массивов есть? – tskippe

+1

Это называется функцией рекуперации, проверьте мой полный ответ. –

0

Я хотел бы попробовать что-то вроде этого (Js консоли действует плохо, поэтому я не могу проверить):

var first = function(a){ 
    return a[1] 
} 

var deepFirst = function(a, depth) { 
    depth = depth || 0 
    if (a.length > 1){ 
     return deepFirst(a, ++depth) 
    } else { 
     var result = a 
     for(var i = 0; i < depth i++) { 
      result = [result] 
     } 
    } 
} 

Там нет типа или проверки безопасности, и я, вероятно, заменить цикл с чем-то рекурсивный ...

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