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

使用splice时出现Uncaught TypeError: 无法赋值给数组只读属性'0'

解决"Cannot assign to read only property '0' of object '[object Array]'"错误

这个报错的核心原因是你试图修改一个只读数组——event.events被标记为不可修改,直接用splice原地修改它就会触发这个错误。

你的代码里用forEach遍历,而且只是原地修改原数组,但对于只读数据来说,必须通过创建新对象/新数组的方式来更新,不能直接改动原数据。

修正后的代码可以这样写:

// 用map返回新的数组,而不是原地修改原数据
const updatedEventColumns = eventColumns.map((event) => {
  if (event._id === source.droppableId) {
    // 创建新的events数组,排除掉指定索引的元素
    const updatedEvents = [
      ...event.events.slice(0, source.index),
      ...event.events.slice(source.index + 1)
    ];
    // 返回新的event对象,保持其他属性不变,替换events为新数组
    return { ...event, events: updatedEvents };
  }
  // 不匹配的项直接返回原对象
  return event;
});

代码说明:

  • 用map代替forEach:map会返回一个全新的数组,不会改动原有的eventColumns
  • 创建updatedEvents:通过slice方法截取原数组的前后部分并拼接,得到去掉指定索引元素的新数组(slice不会修改原数组)
  • 返回新的event对象:用展开运算符...复制原event的所有属性,再替换events为新数组,这样不会修改原有的只读对象

内容的提问来源于stack exchange,提问作者Basher Mansour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:15:37