如何删除列表中对象的_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
相关产品推荐
相关产品推荐

