JS数组无法正确插入对象,存储用户warn字段出现0:1错误如何修复?
问题根源
JavaScript中数组的push()方法返回值是执行push操作后数组的新长度,而不是修改后的数组本身。你代码中把push返回的长度值(也就是你场景里的1)赋值给了newWarn,再把这个数值覆盖到newUser[0].warn字段,自然就得到了非预期的存储结果。
修复方案
因为push()是直接修改原数组的变异方法,你完全不需要额外赋值给新变量,直接操作原warn数组即可。
修改后的代码如下:
const newMsg = { title: msg[0].title, body: msg[0].body, author: msg[0].author, postid: msg[0].postid } // 直接往原warn数组中push新内容,push会直接修改原数组,不需要接收返回值 newUser[0].warn.push(newMsg) console.dir(newMsg) newUser[0].warned = true await newUser[0].save()
如果你需要遵循不可变更新的规范(比如部分数据库更新要求不修改原对象),也可以用数组展开运算符生成新数组赋值:
// 用展开运算符创建包含原有内容+新消息的新数组 newUser[0].warn = [...newUser[0].warn, newMsg]
内容的提问来源于stack exchange,提问作者Liam Sholts
相关产品推荐
相关产品推荐

