gpt4 book ai didi

javascript - Node v.8.1.3 sort() 方法运行不正确?

转载 作者:行者123 更新时间:2023-11-30 13:49:29 24 4
gpt4 key购买 nike

输入有一个数组

['1:nnn','1:vvv','2:zzz','1:yy','1:cc','2:xx','2:uu','2:tt','2:qq','2:aa','1:ff','1:ll','1:pp']

必须在sort()方法中指定比较器,使数组按照以下原则排序:

1) 保持原来的按元素长度排序(不要将不同长度的元素互换,例如元素1:nnn和1:yy)

2)如果元素长度相同,则比较每个元素的第一个字符,先去前缀为1的元素,然后去去前缀为2的元素。

我尝试编写以下代码,但我不明白为什么它在 Node v.8.1.3 上无法正常工作?我得到的错误结果如下所示:

['2:uu','1:nnn','1:ll','1:yy','1:cc','2:xx','1:ff','2:tt','2:qq','2:aa','1:vvv','2:zzz','1:pp']

如果我在浏览器或 stackoverflow 中运行代码,则会得到预期的结果:

["1:nnn","1:vvv","2:zzz","1:yy","1:cc","1:ff","1:ll","1:pp","2:xx","2:uu","2:tt","2:qq","2:aa"]

可能是什么问题,我做错了什么?

let output=['1:nnn','1:vvv','2:zzz','1:yy','1:cc','2:xx','2:uu','2:tt','2:qq','2:aa','1:ff','1:ll','1:pp']

output.sort((a,b) => {
if(a.length===b.length) {
if ((+a.slice(0,1))<(+b.slice(0,1))) return -1
else return 1
} else return 0
})

console.log(output)

最佳答案

您需要对称排序,而不是只返回一个或两个值的 bool 值。

Array#sort期望三个值,具体取决于所需的和给定的顺序,但您的结果缺少一个值,这可能很重要,具体取决于实现的排序算法。

相反,您可以返回值的增量并获得完美的排序结果,而与实现无关。

let output=['1:nnn','1:vvv','2:zzz','1:yy','1:cc','2:xx','2:uu','2:tt','2:qq','2:aa','1:ff','1:ll','1:pp']

output.sort((a, b) => b.length - a.length || a.split(':', 1) - b.split(':', 1));

console.log(output);

关于javascript - Node v.8.1.3 sort() 方法运行不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58573013/

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