7

嗨,我是 node.js 的绝对初学者今天我尝试了以下代码

var fs, arr;
var dir, str;
var cont, item;

fs=require('fs');
cont=fs.readFileSync('unsort.txt').toString();
arr=cont.split('\n');
arr.sort();

for(str=arr.shift();str&&(item=arr.shift());)
    str+='\n'+item;
fs.writeFileSync('sort_by_script.txt', str);

上面的 node.js 代码从 node.exe 的目录中读取一个文件作为字符串。通过换行符 ('\n') 拆分字符串以获取数组。对数组进行排序并将排序后的数组打印到文件中。因此,作为一个整体,脚本读取文件对条目进行排序,并将排序后的条目保存在另一个文件中。问题是排序顺序不正确。我尝试使用 MS Excel 手动对 unsort.txt 的内容进行排序,通过它我得到了正确的排序顺序。任何人都可以帮助我为什么 arr.sort() 不能正常工作。可以下载包中的unsort.txt、sort_by_script.txt、sort_by_ms_excel.txt和node.exe [Sort.rar][1]

注意:unsort.txt 没有数字。一切都只是字母。

unsort.txt 中的示例:

appjs
gbi
node
frame
require
process
module
WebSocket
webkitAudioContext
webkitRTCPeerConnection
webkitPeerConnection00
webkitMediaStream
MediaController
HTMLSourceElement
TimeRanges
4

2 回答 2

11

如果您不传递自定义搜索函数,排序函数会按词法排序,数字会转换为字符串,因此会发生例如“10”在“3”之前的情况。所以字符串得到排序。

您可以将自定义函数传递给决定项目顺序的排序函数,如果是数字,这将是一个示例(请注意,如果您不将它们转换/解析为数字,则示例中的数字将是字符串):

var numsort = function (a, b) {
    return a - b;
}

var numbers = new Array(20, 2, 11, 4, 1);

var result = numbers.sort(numsort);

另一个字符串示例:

var sortstring = function (a, b)    {
    a = a.toLowerCase();
    b = b.toLowerCase();
    if (a < b) return 1;
    if (a > b) return -1;
    return 0;
}
于 2013-04-04T07:10:52.693 回答
4

我会用

arr.sort((obj1, obj2) => {
            return obj1.localeCompare(obj2);
        });

这很可能会解决您的问题。

于 2017-08-24T12:59:26.587 回答