【问题标题】:Node.JS string array sort is not workingNode.JS 字符串数组排序不起作用
【发布时间】:2023-03-28 17:30:01
【问题描述】:

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

【问题讨论】:

标签: node.js sorting arrays


【解决方案1】:

我会用

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

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

【讨论】:

    【解决方案2】:

    如果您不传递自定义搜索函数,排序函数会按词法排序,数字会转换为字符串,因此会发生这种情况,例如“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;
    }
    

    【讨论】:

    • 但是 unsort.txt 根本没有数字。都只是字母。
    • 请在此处发布内容。这是一个猜测和一个例子,你的谷歌文件夹无法打开,它不会永远存在(与这个问题相反)
    • 您现在可以尝试在其他链接中下载它
    • 把它们贴在这里,即使只是文件的摘录也很容易做到
    • 该文件有 564 行条目。如果我在这里发布它会弄得一团糟。我认为下载现在应该可以工作了。再试一次。
    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多