You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何将原数组按字母顺序排序后存入新数组

问题解决方法

排序失效有两个核心原因:

  1. JavaScript 数组原生的sort()方法是原地修改数组的,直接调用会改动原数组,无法直接生成独立的新数组
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:54:21