JavaScript-文件列表对象的自然排序

JavaScript-文件列表对象的自然排序,javascript,natural-sort,filelist,Javascript,Natural Sort,Filelist,我有一个filelist对象,它包含1000多个图像文件。我希望对象按文件名排序,文件名是字母数字。换句话说,我想做一个自然的排序。文件名如下所示: d_1_ct.png d_2_ct.png d_3_ct.png d_4_ct.png 通过执行[].slice.call(filelist\u object)或array.from(filelist\u object),然后调用sort(),将文件列表对象转换为一个数组。如何使filelist对象按文件名自然排序 只要能够在数组元素上使用URL

我有一个filelist对象,它包含1000多个图像文件。我希望对象按文件名排序,文件名是字母数字。换句话说,我想做一个自然的排序。文件名如下所示:

d_1_ct.png
d_2_ct.png
d_3_ct.png
d_4_ct.png
通过执行
[].slice.call(filelist\u object)
array.from(filelist\u object)
,然后调用
sort()
,将文件列表对象转换为一个数组。如何使filelist对象按文件名自然排序

只要能够在数组元素上使用
URL.createObjectURL()
显示图像文件,就可以将其转换为数组

自然排序字母数字字符串不是我想要的,尽管filelist对象中的文件名是字母数字字符串。filelist对象包含以下属性:

0: File
lastModified: 1493435514308
lastModifiedDate: Sat Apr 29 2017 08:41:54 GMT+0530 (India Standard Time)
name: "d_1_ct.png"
size: 5307
type: "image/png"
webkitRelativePath: "img/d_1_ct.png"
__proto__:File

我想在保留文件列表对象的所有属性的同时,对
name
webkitRelativePath
进行排序,因为我使用对象的索引号来显示图像。

我首先使用
array.from()
将文件列表对象转换为数组

然后,我使用了Lauri Rooden编写的
naturalCompare()
函数。这是你的电话号码

然后,我在数组上调用了
naturalCompare()
函数,如下所示:

myArray.sort(function(a,b) {
    return String.naturalCompare(a.name, b.name)
});

我的数组现在已“自然”正确排序。它仍然保留文件列表对象的所有属性,因此我仍然能够对其内容使用
URL.createObjectURL()
方法来显示图像。

我首先使用
array.from()
将文件列表对象转换为数组

然后,我使用了Lauri Rooden编写的
naturalCompare()
函数。这是你的电话号码

然后,我在数组上调用了
naturalCompare()
函数,如下所示:

myArray.sort(function(a,b) {
    return String.naturalCompare(a.name, b.name)
});

我的数组现在已“自然”正确排序。它仍然保留filelist对象的所有属性,因此我仍然能够在其内容上使用
URL.createObjectURL()
方法来显示图像。

很长一段时间以来,我为德语“Umlaute”解决了这一问题,您可以对此进行调整

    function fhwSort(a, b){
       function fhwSplit(fstring){
          var mapObj = {
                ä:"ae",
                ö:"oe",
            ü:"ue",
            Ä:"ÄE",
            Ö:"ÖE",
            Ü:"UE",
            ß:"ss"
            };
          fstring = fstring.replace(/ä|ö|ü|Ä|ö|ü|ß/gi, function(matched){
                       return mapObj[matched];
                  });
          return fstring.toUpperCase().replace(/\d*/g, function (x) {
            return !x=="" ? '0'.repeat(20).substr(0,20-x.length)+x:'';});
       }
       a=fhwSplit(a["name"]);    
       b=fhwSplit(b["name"]);    
       return (a>b)+(a<b)*-1;
    }
    var data = [
       {name : "5.1. Test 3"},
       {name : "5.1. Test 1"},
       {name : "5.2. Test 2"},
       {name : "5.10. Test 10"},
       {name : "5.12. Test 12"},
       {name : "Karl"},
       {name : "Kader"},
       {name : "Käse"},
       {name : "Kuchen"}

       ];
    console.log("fhwSort");
    data.sort(fhwSort);
    for (var i = 0; i < data.length; i++){
      console.log(data[i]["name"]);
    }
功能fhwSort(a、b){
函数fhwSplit(fstring){
var mapObj={
ä:“ae”,
ö:“oe”,
ü:“ue”,
Ä:“ÄE”,
Ö:“ÖE”,
Ü:“UE”,
ß:“ss”
};
fstring=fstring.replace(/||ö|ü||||||||||||||||||||||ß/gi,功能(匹配){
返回mapObj[matched];
});
返回fstring.toUpperCase().replace(/\d*/g,函数(x){
return!x==“”?'0'。重复(20).substr(0,20-x.length)+x:“”;});
}
a=fhwSplit(a[“名称]);
b=fhwSplit(b[“名称]);

return(a>b)+(a很长一段时间,我为德语“Umlaute”解决了这个问题,你可以修改这个

    function fhwSort(a, b){
       function fhwSplit(fstring){
          var mapObj = {
                ä:"ae",
                ö:"oe",
            ü:"ue",
            Ä:"ÄE",
            Ö:"ÖE",
            Ü:"UE",
            ß:"ss"
            };
          fstring = fstring.replace(/ä|ö|ü|Ä|ö|ü|ß/gi, function(matched){
                       return mapObj[matched];
                  });
          return fstring.toUpperCase().replace(/\d*/g, function (x) {
            return !x=="" ? '0'.repeat(20).substr(0,20-x.length)+x:'';});
       }
       a=fhwSplit(a["name"]);    
       b=fhwSplit(b["name"]);    
       return (a>b)+(a<b)*-1;
    }
    var data = [
       {name : "5.1. Test 3"},
       {name : "5.1. Test 1"},
       {name : "5.2. Test 2"},
       {name : "5.10. Test 10"},
       {name : "5.12. Test 12"},
       {name : "Karl"},
       {name : "Kader"},
       {name : "Käse"},
       {name : "Kuchen"}

       ];
    console.log("fhwSort");
    data.sort(fhwSort);
    for (var i = 0; i < data.length; i++){
      console.log(data[i]["name"]);
    }
功能fhwSort(a、b){
函数fhwSplit(fstring){
var mapObj={
ä:“ae”,
ö:“oe”,
ü:“ue”,
Ä:“ÄE”,
Ö:“ÖE”,
Ü:“UE”,
ß:“ss”
};
fstring=fstring.replace(/||ö|ü||||||||||||||||||||{
返回mapObj[matched];
});
返回fstring.toUpperCase().replace(/\d*/g,函数(x){
return!x==“”?'0'。重复(20).substr(0,20-x.length)+x:“”;});
}
a=fhwSplit(a[“名称]);
b=fhwSplit(b[“名称]);

return(a>b)+(a现在有一种使用
localeCompare
更简单的方法:


此外,您还可以通过以下方式加快速度。

现在有一种更简单的方法使用
localeCompare


此外,您还可以通过加快速度。

认为这可能有助于您排除更新的可能重复项,以解释为什么它不是自然类型的字母数字字符串的重复项。认为这可能有助于您排除更新的可能重复项,以解释为什么它不是自然类型的字母数字字符串的重复项。为什么
ß中的空格:“ss”
?为什么有些替换为
ÄE:,
仍然是一些umlauts?为什么
ßss:
?为什么有些替换为
ÄE:,
仍然是一些umlauts?