Intl.Collator()与localeCompare()中的co参数具体有什么作用
co参数的核心作用
co是BCP 47语言标签内置的排序规则扩展标识,和Intl.Collator配置项里的collation属性完全等价,作用是指定同一语言/区域下的差异化排序规则,解决同一个语言在不同场景下排序逻辑不同的需求。
比如德语场景下co=phonebk对应电话本排序规则(会把特殊字符ä当作ae处理),中文场景下co=pinyin对应拼音排序、co=stroke对应笔画排序。
排序对象说明
co的作用对象是你实际要进行比较的字符串内容,而非locales参数里传入的语言标签。
比如你需要对一堆中文商品名称排序,co的取值只会影响这些商品名称的排序结果,不会改变语言标签本身的匹配逻辑。
和多语言标签优先级的关系
二者完全无关。
你传入多个语言标签时,JS引擎会按照数组的先后顺序依次匹配当前运行环境支持的区域设置,这个匹配逻辑不受co参数影响。co只会在匹配到对应的区域设置后,作用于该区域设置的排序规则。
举个实际使用的示例:
const testList = ['上海', '北京', '广州', '深圳'] // 按拼音排序 console.log(testList.sort(new Intl.Collator('zh-CN-u-co-pinyin').compare)) // 输出:['北京', '广州', '上海', '深圳'] // 按笔画排序 console.log(testList.sort(new Intl.Collator('zh-CN-u-co-stroke').compare)) // 输出:['上海', '广州', '北京', '深圳'] (按首字笔画数排序:上3画、广3画、北5画、深11画)
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

