2017-12-27 11 views
0

Gibt es eine einfachere Möglichkeit, diese zu sortieren? Wenn ich readdir benutze, gibt es es so, dass es 1, 10, 11, 12 ... 19, 2, 20, usw. geht. Dieser Weg geht durch alle von ihnen und entfernt ".json" am Ende, DANN sortiert sie numerisch (was auf Zahlen, nicht auf Strings, funktioniert) und fügt dann die ".json" zum Ende zurück. Gibt es einen besseren Weg dies zu tun?Einfacher Weg, ein Array von .json-Dateien numerisch zu sortieren, die von fs.readdir stammen?

fs.readdir("data/items/", function(err,files) { 
for(i = 0; i < files.length; i++) { 
    files[i] = files[i].split(".")[0]; 
} 
files = files.sort(function(a,b){return a-b}); 
for(i = 0; i < files.length; i++) { 
    files[i] += ".json"; 
} 

//load the files.. etc. 

}); 
+1

hat ein Beispiel für die Dateinamen? – Callam

+0

Geben Sie eine Liste aller Dateien im Ordner "data/items" an. – Intervalia

+0

Ihr aktuelles Beispiel sortiert nie etwas numerisch. (Ich brauche ein Beispiel für Dateinamen, um sicher zu sein), aber es sieht so aus, als ob Sie '0.json',' 1.json', ... '20.json' usw. haben. Ihr vergleiche fn in der Sortierung vergleicht Zeichenfolgen, weil Sie Übergeben Sie die Dateipräfixe niemals an Numbers. –

Antwort

0
fs.readdir("data/items/", function(err,files) { 
    files.sort(function(a, b){ 
    return a.split(".")[0] - b.split(".")[0]; 
    }); 

    //load the files.. etc. 
}); 

sollte genug sein, wenn Sie Dateien vertrauen sind alle gut benannt.

Die sort method sorts an Ort und Stelle. Und es ist nicht notwendig, alle Präfixe vor dem Sortieren und dann wieder zu trennen, die Vergleichsfunktion kann diese Logik isoliert halten und die files var bleibt immer eine Liste von Dateinamen.

Verwandte Themen