You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:16:35