【问题标题】:Nodejs filesystem array sort numeric [duplicate]Nodejs文件系统数组排序数字[重复]
【发布时间】:2016-10-25 17:29:41
【问题描述】:

我的 nodejs 应用程序正在读取一些图像文件。但它按字母顺序排序。

左边是 Nodejs 得到的东西,右边是它的样子。

而我的 Nodejs 代码是:

var files = fs.readdirSync('./public/manga/' + req.params.name).map(function(item){
    var subfolders = fs.readdirSync('./public/manga/' + req.params.name + '/' + item);
    return {
        chapter: item,
        paths: subfolders.map(function (i) {
            return "manga/" + req.params.name + "/" + item + "/" + i;
        })
    }
})
res.json(files);
});

我尝试过但没有成功。

var myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){ //Array now becomes [7, 8, 25, 41]
return a - b
})

【问题讨论】:

  • 有什么问题?
  • 文件名是字符串,按字母数字排序。如果您将文件命名为 00、01、02、03 等,它将按照您的需要进行排序。

标签: javascript node.js


【解决方案1】:

您正在寻找natural sort 订单。那里有很多示例。

有一个很好的 npm 模块https://github.com/Bill4Time/javascript-natural-sort

你也可以实现一个快速函数,有很多很好的例子:

【讨论】:

  • 谢谢。本站的主题解决了这个问题。
【解决方案2】:

这里的问题在于文件名中包含字母。但是从你的例子来看,由于节点已经按正确的顺序对 00Letter 进行了排序,所以我有这样的简单解决方案

var a = ["10.jpg", "00a.jpg", "5.jpg", "00c.jpg", "3.jpg", "00b.jpg"];

var b = a.sort(function(a,b) {
  return parseInt(a) > parseInt(b);
});

console.log(b);
//output 
["00a.jpg", "00c.jpg", "00b.jpg", "3.jpg", "5.jpg", "10.jpg"]

更新 正如@Ding 提到的。最好创建自定义函数来捕获所有内容,而不是希望节点排序。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多