Node.JS字符串数组排序不起作用

时间:2013-04-04 06:57:35

标签: node.js sorting arrays

您好我是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

2 个答案:

答案 0 :(得分:11)

如果您没有传递自定义搜索功能,则排序功能会在词汇上进行排序,数字会被转换为字符串,因此会发生这种情况。 “10”在“3”之前。所以字符串会被排序。

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

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;
}

答案 1 :(得分:3)

我会用

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

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