按order整数值排序数组对象遇TypeError问题求助
解决方案:简化排序逻辑 + 修复只读数组报错
我来帮你搞定这两个问题——既简化排序代码,又解决那个烦人的TypeError: Cannot assign to read only...错误!
一、简化整数排序的代码
对于整数类型的order属性,你完全不需要写复杂的三元判断,直接利用两个整数的差值就能实现简洁的升序排序:
array.sort((a, b) => a.order - b.order);
原理说明:
- 如果
a.order > b.order,差值为正数,sort会把a排在b后面(符合升序要求) - 如果
a.order < b.order,差值为负数,sort会把a排在b前面 - 如果两者相等,差值为0,元素位置保持不变
要是你需要降序排序,只需要把差值反过来:
array.sort((a, b) => b.order - a.order);
二、修复Cannot assign to read only错误
这个错误的核心原因是:你要排序的数组处于只读状态(比如被Object.freeze()冻结,或是来自不可变数据结构,比如直接修改React的state)。sort()方法是原地修改原数组的,所以会触发只读限制报错。
解决方法很简单:先创建原数组的副本,再对副本排序:
方法1:使用展开运算符创建副本
const originalArray = [ { _id: 'xxnQt5X8pfbcJMn6i', order: 2 }, { _id: 'X8pfbcJxxnQt5Mn6i', order: 1 }, { _id: 'Qt5X8pfxxnbcJMn6i', order: 3 } ]; // 创建副本后排序,不修改原数组 const sortedArray = [...originalArray].sort((a, b) => a.order - b.order);
方法2:使用slice()创建副本
slice()不传参数时会返回原数组的浅拷贝,效果和展开运算符一致:
const sortedArray = originalArray.slice().sort((a, b) => a.order - b.order);
这样操作的是副本,不会触碰原只读数组,自然就不会报错了。
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

