我想用字符串对数组排序.但是,大写字母应该总是在相应的小写字母之前(例如顺序:A a B b...).

为了存档,我try 使用localComparecaseFirst: "upper"sensitivity: "case":

const input = ["ADR 2023", "Added Values", "DEMO build", "DEMO Build", "2nd Outlook", "demo award"]
const output = input.sort((a, b) => a.localeCompare(b, "en-US", { caseFirst: "upper", sensitivity: "case" }))
console.log(output)

我希望输出是:

["2nd Outlook", "ADR 2023", "Added Values", "DEMO Build", "DEMO build", "demo award"]

不幸的是,输出是:

["2nd Outlook", "Added Values", "ADR 2023", "demo award", "DEMO Build", "DEMO build"]

如何获得预期订单?在这个例子中,我使用了en-US作为locale.然而,在我的实际项目中,它可以是任何支持的语言环境,长度为五个字符.

推荐答案

  1. 不要使用localeCompare),因为它每次都产生Intl.Collator—太慢了.
  2. 您可以逐个字符比较,以确保可以处理任意数量的大写字母.

const input = ["ADR 2023", "Added Values", "DEMO build", "DEMO Build", "2nd Outlook", "demo award"];
const {compare} = Intl.Collator("en-US", { caseFirst: "upper"});
const output = input.sort((a, b) => {
  for(let i = 0; i < a.length && i < b.length; i++){
    const r = compare(a[i], b[i]);
    if(r) return r;
  }
  if(a.length > b.length) return 1;
  if(a.length < b.length) return -1;
  return 0;
})
console.log(output)

VLAZ建议的字符串迭代器版本:

const input = ["ADR 2023", "Added Values", "DEMO build", "DEMO Build", "2nd Outlook", "demo award"];
const {compare} = Intl.Collator("en-US", { caseFirst: "upper"});
const output = input.sort((a, b) => {
  const ia = a[Symbol.iterator](), ib = b[Symbol.iterator]();
  while(true){
    const ca = ia.next().value, cb = ib.next().value;
    if(!ca) return ba ? -1 : 0
    if(ca && !cb) return 1;
    const r = compare(ca, cb);
    if(r) return r;
  }
})
console.log(output)

Javascript相关问答推荐

容器如何更改默认插槽中子项的显示?

React Native平面列表自动滚动

useNavigation更改URL,但不呈现或显示组件

将2D数组转换为图形

如何修复我的js构建表每当我添加一个额外的列作为它的第一列?

为什么promise对js中的错误有一个奇怪的优先级?

从Node JS将对象数组中的数据插入Postgres表

数字时钟在JavaScript中不动态更新

将核心模块导入另一个组件模块时存在多个主题

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

如何将innerHTML字符串修剪为其中的特定元素?

如何在Bootstrap中减少网格系统中单个div的宽度

面对代码中的错误作为前端与后端的集成

如何在Press上重新启动EXPO-AV视频?

未捕获的运行时错误:调度程序为空

FileReader()不能处理Firefox和GiB文件

为什么我的Navbar.css没有显示在本地主机页面上?

无法向甜甜圈图表上的ChartJSImage添加可见标签

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?

从客户端更新MongoDB数据库