可以javascript排序包含数字的字符串?

时间:2015-03-21 07:25:57

标签: javascript sorting

我正在制作一个小网页应用,其中我使用了AHK和javascript。 我让AHK成为.js文件的一组图像路径,就像这样

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

这些图像应该在浏览器中查看,问题是这两种语言的排序方法不像windows排序。

我想要的是javascript对变量中的文件进行排序,以便它们就像在这样的窗口中查看一样

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

顺便说一句:我已经搜索过之前发布的功能,但它只适用于仅限数字和包含数字的字符串,如此案例

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

你可以使用正则表达式来获取文件名中的数字(假设你的文件名有一个模式,就像你在顶部给出的例子一样)并根据它进行排序。

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);
});

现在,importFiles将包含您提到的已排序数组。

答案 2 :(得分:0)

您必须使用for循环和.split()方法拆分字符串以对其进行排序。

示例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])
        }
    }
}