【问题标题】:Simpler way to numerically sort an array of .json files got from fs.readdir?对从 fs.readdir 获得的 .json 文件数组进行数字排序的更简单方法?
【发布时间】:2017-12-27 13:04:43
【问题描述】:

有没有更简单的方法来排序这些?当我使用 readdir 时,它会以这样的方式给出它,即 1、10、11、12... 19、2、20 等。这种方式会遍历所有这些并在最后删除“.json”,然后对它们进行数字排序(这将在数字上正常工作,而不是字符串),然后将“.json”添加回末尾。有更好的方法吗?

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.

});

【问题讨论】:

  • 有文件名的例子吗?
  • 提供data/items 文件夹中所有文件的列表。
  • 您当前的示例从不按数字对任何内容进行排序。 (需要确定文件名示例)但您似乎有0.json1.json、...20.json 等。您在排序中的比较 fn 是比较字符串,因为您从未将文件前缀转换为数字。
  • 我有这些文件: 0.json 1.json 10.json 2.json 20.json 22.json 3.json 如果我直接从 readdir 中提取它们,它们就是按这个顺序排列的。通过阅读第一个“字母”,然后如果两个匹配,则阅读第二个。但是,以我的方式使用它,它按预期返回。 0.json 1.json 2.json 3.json 10.json 20.json 22.json i.imgur.com/i5dnlao.png

标签: javascript node.js sorting fs


【解决方案1】:
fs.readdir("data/items/", function(err,files) {
  files.sort(function(a, b){
    return a.split(".")[0] - b.split(".")[0];
  });

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

应该足够了,如果您相信文件都命名正确。

sort method sorts 就位。并且不需要在排序之前分离所有前缀然后重新附加,比较函数可以保持该逻辑隔离,files var 始终保持文件名列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    相关资源
    最近更新 更多