对Proxy包裹的对象数组排序时出现localeCompare is not a function报错如何解决
问题根因
localeCompare 是字符串原型链上的专属方法,你代码中用于比较的itemIndex字段是Number数值类型,本身不存在该方法,所以触发类型错误,和sort作用域、Proxy代理、Vue3环境均无关。
解决方案
你可以根据实际业务需求选择以下两种修复方案:
- 方案1:先转字符串再调用
localeCompare,适合需要遵循字符串排序规则的场景myData.sort((a, b) => String(a.itemIndex).localeCompare(String(b.itemIndex))) - 方案2:直接使用数值比较逻辑,更适配纯数字序号的排序场景,性能更优
// 正序:从小到大排 myData.sort((a, b) => a.itemIndex - b.itemIndex) // 倒序:从大到小排 // myData.sort((a, b) => b.itemIndex - a.itemIndex)
可选优化
如果业务中存在itemIndex为空的异常情况,可以加可选链和默认值兜底,避免空值引发的额外报错:
myData.sort((a, b) => String(a.itemIndex ?? '').localeCompare(String(b.itemIndex ?? '')))
内容的提问来源于stack exchange,提问作者Harvey Mushman
相关产品推荐
相关产品推荐

