Frage kann Javascript Zeichenketten mit Zahlen sortieren?


Ich mache eine kleine Web-App, in der ich AHK und Javascript benutze. Ich mache AHK eine Gruppe von Bildern Pfade zu der .js-Datei in etwa so

var importedFiles = [
 "file:///F:/image1.jpg",
 "file:///F:/image10.jpg",
 "file:///F:/image11.jpg",
 "file:///F:/image2.jpg",
]

und diese Bilder sollten im Browser betrachtet werden, das Problem ist, dass die Sortiermethode der beiden Sprachen nicht wie die Windows-Sortierung ist.

Was ich will, ist Javascript sort die Datei in der Variablen, so dass sie wie in solchen Fenstern angezeigt werden

var importedFiles = [
 "file:///F:/image1.jpg",
 "file:///F:/image2.jpg",
 "file:///F:/image10.jpg",
 "file:///F:/image11.jpg",
]

BTW: Ich habe nach den Funktionen gesucht, die vorher gepostet wurden, aber es funktioniert nur mit Nummer nur und Strings, die Nummer wie diesen Fall enthalten


5
2018-03-21 07:25


Ursprung


Antworten:


var importedFiles = [
 "file:///F:/image1.jpg",
 "file:///F:/image10.jpg",
 "file:///F:/image11.jpg",
 "file:///F:/image2.jpg",
]

var customSort = function (a, b) {
    return (Number(a.match(/(\d+)/g)[0]) - Number((b.match(/(\d+)/g)[0])));

}

// use sort() and apply the customSort function
console.log(importedFiles.sort(customSort));

//outputs

[
   "file:///F:/image1.jpg", 
   "file:///F:/image2.jpg", 
   "file:///F:/image10.jpg", 
   "file:///F:/image11.jpg"
]

DEMO


6
2018-03-21 08:05



Sie müssen die Zeichenfolge aufteilen, um sie zu sortieren, indem Sie a verwenden for Schleife und die .split() Methode.

Beispiel JS:

function sortNumber(a,b) {
    return a - b;
}
var arrayToSort = ["Orange1","Orange3","Orange2"];
Numbers=[];
sortedArray = [];
for(var i = 0; i< arrayToSort.length; i++) {
    numberValue = arrayToSort[i].split("Orange")[1]//Returns number in string
    Numbers.push(numberValue).sort(sortNumber)
    //Numbers now contains a sorted list of the numbers
}
for(var i = 0; i < arrayToSort.length; i++) {
    for(var j = 0; j < arrayToSort.length; j++) {
        if(arrayToSort[j].indexOf(Numbers[i]) !== -1) {
            sortedArray.push(arrayToSort[j])
        }
    }
}

0
2018-03-21 08:00



Sie können eine Regex verwenden, um die Zahl im Dateinamen zu erhalten (vorausgesetzt, Ihre Dateinamen haben ein Muster wie das Beispiel, das Sie oben angegeben haben) und sortieren Sie danach.

var r = /[A-Za-z\:\/]+([0-9]+)\.jpg/;
importedFiles.sort(function(f1, f2) {
     var match1 = r.exec(f1);
     var num1 = match1[1];

     var match2 = r.exec(f2);
     var num2 = match2[1];

     //now you have the two numbers in num1 and num2
     return parseInt(num1, 10) - parseInt(num2, 10);
});

importedFiles enthalten nun das sortierte Array wie Sie bereits erwähnt haben.


0
2018-03-21 08:05