Node.JSstring数组sorting不工作

嗨,我绝对是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的目录中以stringforms读取一个文件。 按换行符('\ n')拆分string以获取数组。 对数组进行sorting并将sorting后的数组打印到文件中。 因此,整个脚本读取一个文件对条目进行sorting,并将sorting的条目保存在另一个文件中。 问题是sorting顺序不正确。 我尝试使用MS Excel手动sortingunsort.txt的内容,通过它我得到了正确的sorting顺序。 任何人都可以帮助我为什么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 

如果你没有传递一个自定义的search函数,sort函数按照词法sorting,数字会被转换为string,所以碰巧例如“10”在“3”之前。 所以string得到sorting。

您可以将自定义函数传递给决定项目顺序的sorting函数,在数字的情况下,这将是一个例子(小心,如​​果您不要将它们转换/parsing为数字,则示例中的数字将是string):

 var numsort = function (a, b) { return a - b; } var numbers = new Array(20, 2, 11, 4, 1); var result = numbers.sort(numsort); 

string的另一个例子:

 var sortstring = function (a, b) { a = a.toLowerCase(); b = b.toLowerCase(); if (a < b) return 1; if (a > b) return -1; return 0; } 

我会用

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

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