2017-12-05 4 views
1

Ich weiß, es gibt ein paar Antworten auf die Frage, aber als ich versuchte, meine eigenen zu machen, habe ich mich sehr verloren, wie rekursive Funktionen arbeiten, hier ist was ich versucht:Flatten Array 2D

function flatcoords(arr) { 
 
    for (i = 0; i < arr.length; i++) { 
 
    const value = arr[i]; 
 
    if (value.isArray) { 
 
     return flatcoords(value); 
 
    } else { 
 
     return arr; 
 
    } 
 
    } 
 

 
} 
 

 
const arr_test = [ 
 
    [ 
 
    [1, 2], 
 
    [1, 2] 
 
    ], 
 
    [1, 2], 
 
    [1, 2], 
 
    [ 
 
    [ 
 
     [1, 2], 
 
     [1, 2] 
 
    ] 
 
    ] 
 
]; 
 

 
//wanted_result = [ [1,2],[1,2],[1,2],[1,2],[1,2],[1,2] ] 
 
console.log(flatcoords(arr_test));

Ich möchte das Ergebnis ein 2D-Array sein, was fehlt mir in meiner Logik?

+0

'[1, 2] ['? sollte da nicht ein Komma nach ']' sein? – gurvinder372

+0

@ gurvinder372 oops, behoben, danke – Mojimi

Antwort

3

Zuerst müssen Sie alle Variablen vor der Verwendung deklarieren. Dann könnten Sie Array.isArray für eine Prüfung verwenden, wenn ein Element ein Array ist.

In diesem Fall schlage ich vor, das erste Element des aktivierten Elements zu überprüfen, wenn es sich ebenfalls um ein Array handelt, in diesem Fall das Array.

Als Ergebnis ist ein Array nützlich, weil nicht nur ein Element zurückgegeben werden sollte, sondern alle. Und während Arrays mehr Elemente haben, müssen Sie alle Elemente an das vorhandene Ergebnis-Array anhängen.

function flatcoords(array) { 
 
    var result = [], 
 
     value, 
 
     i; 
 

 
    for (i = 0; i < array.length; i++) { 
 
     value = array[i]; 
 
     if (Array.isArray(value) && Array.isArray(value[0])) { 
 
      result = result.concat(flatcoords(value)); 
 
     } else { 
 
      result.push(value); 
 
     } 
 
    } 
 
    return result; 
 
} 
 

 
const arr_test = [[[1, 2], [1, 2]], [1, 2], [1, 2], [[[1, 2], [1, 2]]]]; 
 

 
console.log(flatcoords(arr_test));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Was verhindert, dass 'result' auf ein leeres Array zurückgesetzt wird, wenn Sie die Funktion rekursiv aufrufen? –

+1

@CarlEdwards, zumindest erhalten Sie die Elment oder das innere Array. –

Verwandte Themen