Die JavaScript-Rekursion ist abgeschlossen, bevor der gesamte Baum durchlaufen wird.

Ich arbeite an einem Projekt, in dem in einer Übung eine Datenstruktur durchlaufen und ein Array mit allen Dateien (d. H. * .Js, * .css) zurückgegeben werden soll:

var fileData = {
  dir : 'app',
  files : [
    'index.html',
    {
      dir : 'js',
      files: [
        'main.js',
        'app.js',
        'misc.js',
        {
          dir : 'vendor',
          files : [
            'jquery.js',
            'underscore.js'
          ]
        }
      ]
    },
    {
      dir : 'css',
      files : [
        'reset.css',
        'main.css'
      ]
    }
  ]
};

Ich habe mir eine rekursive Lösung ausgedacht, damit beim AufruflistFiles mit ParameterfileData es sollte das gewünschte Array zurückgeben:

function listFiles(data) {
  var retval = [];
  var files;

  (function crawl(filedata) {
    files = filedata.files;

    if (typeof files !== 'undefined') {
      for (var i = 0; i < files.length; i++) {
        if (typeof files[i] === 'string') {
          retval.push(files[i]);
        } else {
          crawl(files[i]);
        }
      }
    }
  })(data);

  return retval;
}

Beim Ausführen des Codes wird jedoch nur * .js zurückgegeben. Das heißt im Verzeichnisapp, mein Programm soll alle drei Elemente durchlaufen, aber nach dem rekursiven Aufruf beim zweiten wird der dritte nicht geprüft (/ css). Kann mir jemand erklären warum? Danke vielmals!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage