JavaScript如何向已有对象内指定chatId的key追加消息对象?
问题解决方法
你的问题出在没有展开messageToAdd对象,直接把它作为整体放到新对象里,导致原有内容被错误替换(实际是新增了一个messageToAdd键,而非合并它的内部键值对)。
正确写法1:展开messageToAdd内容
用扩展运算符...展开messageToAdd,让它内部的键值对直接合并到目标对象中:
object[chatId] = {...object[chatId], ...messageToAdd};
比如你的场景中,messageToAdd是{"messageId3": {message: "newMessage", id: 2920222}},展开后messageId3会直接追加到chatid1的对象里,实现预期的追加效果。
正确写法2:直接赋值单个消息
如果messageToAdd仅包含一条消息,也可以直接给对应键赋值,更直观:
// 已知消息键的情况 object[chatId]["messageId3"] = {message: "newMessage", id: 2920222}; // 动态获取消息键的情况 const [messageKey] = Object.keys(messageToAdd); object[chatId][messageKey] = messageToAdd[messageKey];
正确写法3:使用Object.assign合并对象
也可以用Object.assign方法实现对象合并,效果和扩展运算符一致:
object[chatId] = Object.assign({}, object[chatId], messageToAdd);
验证结果
执行上述任意代码后,object.chatid1的结构会变为:
"chatid1": { "messageId1": {message: "hello", id: 293839}, "messageId2": {message: "test", id: 2929292}, "messageId3": {message: "newMessage", id: 2920222} }
内容的提问来源于stack exchange,提问作者Coding Ninja123211
相关产品推荐
相关产品推荐

