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

如何删除列表中对象的_id?更新数据时的技术难题

解决思路

问题根源

你当前代码里的 delete formData.List.map((x : any) => x._id) 是完全错误的用法:

  • map 会返回新数组,不会修改原数组内的元素
  • delete 是用来删除对象属性的,你这里删除的是临时生成的新数组(它甚至不是formData的属性),自然对原List里的元素毫无影响

正确的两种实现方式

方式1:用map生成不含_id的新数组(推荐,不污染原始数据)

遍历List数组,复制每个元素并删除_id,再把新数组赋值给formData.List:

if (formData.List && Array.isArray(formData.List)) {
  formData.List = formData.List.map(item => {
    const newItem = {...item}; // 复制原对象,避免修改原始数据
    delete newItem._id;
    return newItem;
  });
}

方式2:用forEach直接修改原数组元素

如果不需要保留原始数据,可以直接遍历原数组删除每个元素的_id:

if (formData.List && Array.isArray(formData.List)) {
  formData.List.forEach(item => {
    delete item._id;
  });
}

整合到你的代码里

修改后的更新分支代码如下:

if (id) {
  const formData = { ...result, ...values };
  console.log(formData);
  delete formData._id;
  delete formData.createdAt;
  delete formData.updatedAt;
  delete formData.enrolledCourses;
  delete formData.isProfileCompleted;

  // 新增:处理List中的_id
  if (formData.List && Array.isArray(formData.List)) {
    formData.List = formData.List.map(item => {
      const newItem = {...item};
      delete newItem._id;
      return newItem;
    });
  }

  usersService
    .update(id, formData)
    .then(() => {
      saved();
      rowHighlight(id);
    })
    .catch((error) => {
      message.error(`${t("error")} ${error.response.data.message}`);
    })
    .finally(() => {
      setIsLoading(false);
    });
}

内容的提问来源于stack exchange,提问作者Frank HAWK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:48:36