js localecompare 实现
使用 localeCompare 进行字符串比较
localeCompare 是 JavaScript 字符串对象的方法,用于根据当前语言环境的排序规则比较两个字符串。返回一个数字,表示比较结果:
- 负数:当前字符串在排序中位于参数字符串之前。
- 0:字符串排序相同。
- 正数:当前字符串在排序中位于参数字符串之后。
语法:
string.localeCompare(compareString, locales, options)
基本用法
直接比较两个字符串的默认排序:

const result = 'a'.localeCompare('b'); // -1
console.log(result); // 输出取决于语言环境
指定语言环境
通过 locales 参数指定语言或区域设置,例如德语('de'):
console.log('ä'.localeCompare('z', 'de')); // -1(德语中 ä 排序在 z 前)
console.log('ä'.localeCompare('z', 'sv')); // 1(瑞典语中 ä 排序在 z 后)
使用比较选项
options 参数可以控制大小写、数字排序等行为:

// 忽略大小写比较
console.log('A'.localeCompare('a', undefined, { sensitivity: 'base' })); // 0
// 启用数字排序
const items = ['file1', 'file10', 'file2'];
items.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
console.log(items); // ['file1', 'file2', 'file10']
常见选项说明
sensitivity:'base': 忽略大小写和重音(如 "a" == "á")。'accent': 区分重音但不区分大小写(如 "a" != "á")。'case': 区分大小写但不区分重音。'variant': 区分大小写和重音(默认)。
numeric: 设为true时支持数字的自然排序(如 "2" < "10")。ignorePunctuation: 设为true时忽略标点符号。
实际应用示例
对多语言数组排序:
const names = ['Zoë', 'Åge', 'Éléonore', 'Adam'];
names.sort((a, b) => a.localeCompare(b, 'fr', { ignorePunctuation: true }));
console.log(names); // ['Adam', 'Éléonore', 'Zoë', 'Åge'](法语排序)
浏览器兼容性
localeCompare 广泛支持,但选项参数(如 locales 和 options)在旧浏览器可能需要 polyfill。可通过 Intl.Collator 实现类似功能:
const collator = new Intl.Collator('de');
console.log(collator.compare('ä', 'z')); // -1






