gpt4 book ai didi

javascript - Node.js - 首先对从字母开始且长度较长的字符串进行排序,然后是从小到大的数字开始的字符串

转载 作者:行者123 更新时间:2023-12-02 21:03:07 29 4
gpt4 key购买 nike

我有一个对象数组,其中每个对象都有一个板键,经过一番尝试和错误(+ stackoverflow)我使用了这个函数:

sort(function(a, b) {
return a.plate.toLowerCase() > b.plate.toLowerCase() ? a.plate.localeCompare(b.plate): -1;
});

输出此订单。

[ "245/TAE.", "322(1)/SPA", "322(2)/SPA", "322(3)/SPA", "365/SDFA", "365/TRS", "964/ΜΕΝΤ."
, "SG/349(1)"
,"SG/349(3)"
,"SG/PASD."
,"SG/Χ''RAS."
,"SOTRA/Χ''SIMOTSEOY"]

这在某种程度上是一个可行的选择,但我期望的结果是:

["SOTRA/Χ''IMOTSEOY", "SG/Χ''RAS.", "SG/PASD.", "SG/349(1)"
,"SG/349(3)"
, "245/TAE.", "322(1)/SPA", "322(2)/SPA", "322(3)/SPA", "365/SDFA", "365/TRS.", "964/ΜΕΝΤ."
]

仅包含字母的任何内容都会排在前面,然后是第一个字符(字母),然后第一个字符(按升序排列)。

我确实尝试了一些反转元素或使用正则表达式的变体,但它没有产生预期的结果。

前端使用Vuejs,这里有一个jsfiddle .

最佳答案

使用自定义排序顺序,您需要更复杂的排序函数。有很多可能的方法可以做到这一点,但是评分函数可以工作(也许缓存这个值,具体取决于项目的数量)

function scoreIt(n){
// does n contain any digits?
if(/[0-9]/.test(n)){
// is the first char a letter?
if(/^[a-z]/.test(n)){
return 1; // first char is a letter and there are digits somewhere
}else{
return 2; // first char is not a letter
}
}else{
return 0; // no digits
}
}

然后,在您的排序函数中,将其用作:

let a0 = a.plate.toLowerCase(), b0 = b.plate.toLowerCase(),
a1 = scoreIt(a0), b1 = scoreIt(b0);
if(a1 == b1){
// your original code
return a0 > b0 ? a.plate.localeCompare(b.plate): -1;
} else {
return a1-b1;
}

关于javascript - Node.js - 首先对从字母开始且长度较长的字符串进行排序,然后是从小到大的数字开始的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61290192/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com