JavaScript如何将原数组按字母顺序排序后存入新数组
问题解决方法
排序失效有两个核心原因:
- JavaScript 数组原生的
sort()方法是原地修改数组的,直接调用会改动原数组,无法直接生成独立的新数组 sort()默认按照字符的Unicode编码值排序,对葡萄牙语中带重音、变音符号的字符(比如ê、í、ç、ã)排序逻辑不符合日常字母排序规则,会出现顺序错乱。
正确实现代码
要生成不影响原数组的独立排序结果,先对原数组做浅拷贝,再通过localeCompare指定葡萄牙语区域排序规则即可:
var palavras = new Array(5); palavras[0] = "Português"; palavras[1] = "Inglês"; palavras[2] = "Programação C"; palavras[3] = "Programação JS"; palavras[4] = "Educação Física"; // 生成独立排序新数组,原数组palavras不会被改动 const arraySorted = [...palavras].sort((a, b) => a.localeCompare(b, 'pt-BR'));
运行后arraySorted的内容和预期结果完全一致:
arraySorted[0]="Educação Física"arraySorted[1]="Inglês"arraySorted[2]="Português"arraySorted[3]="Programação C"arraySorted[4]="Programação JS"
旧环境兼容写法
如果需要兼容不支持ES6展开运算符的老旧运行环境,可以用slice()方法做数组拷贝,写法如下:
var arraySorted = palavras.slice().sort(function(a, b) { return a.localeCompare(b, 'pt-BR'); });
注意:不要省略
localeCompare直接调用sort(),否则带变音符号的词汇排序会出现不符合预期的错位。
内容的提问来源于stack exchange,提问作者Francisco Franco
相关产品推荐
相关产品推荐

