JavaScript按姓氏字母顺序排序账户数组不生效如何解决?
问题原因
你的代码存在两个核心错误:
- 取值路径错误:
last属性嵌套在name对象下,不能直接通过x.last/y.last获取,正确路径是x.name.last/y.name.last - 字符串比较方式错误:JS中字符串不能用减号
-做排序比较,减号会尝试把字符串转成数字,最终得到NaN,导致排序失效,字符串按字母顺序排序需要使用localeCompare()方法
正确实现代码
function sortAccountsByLastName(accounts) { // 如果不需要保留原数组顺序可以省略拷贝逻辑,直接用accounts.sort return [...accounts].sort((x, y) => x.name.last.localeCompare(y.name.last)) }
补充说明
如果需要忽略大小写、特殊字符的差异实现更宽松的字母排序,可以给localeCompare添加配置参数:
x.name.last.localeCompare(y.name.last, undefined, { sensitivity: 'base' })
另外JS的Array.sort()是原地排序,会直接修改原数组,如果需要保留原数组的原始顺序,排序前先对数组做浅拷贝即可。
内容的提问来源于stack exchange,提问作者SwishitySwoosh
相关产品推荐
相关产品推荐

