JavaScript中Map对象内对象与数组的访问及修改方法问询
关于JavaScript Map中修改嵌套数组的疑问解答
嘿,这个问题问到点子上了!其实你完全不需要把整个键值对取出来修改后再用.set()存回Map里——因为JavaScript里的对象和数组都是引用类型,Map中存储的只是指向这些对象的引用,而不是对象本身的拷贝。
直接看例子最清楚:
// 初始化你的用户Map const userDB = new Map(); // 添加一个测试用户 userDB.set('someUserID', { id: 'Marty', password: 'hashedPassword123', friends: [], posts: [] }); // 直接获取用户对象,修改posts数组 const marty = userDB.get('someUserID'); marty.posts.push({ id: 'post1', content: 'Hello world!', createdAt: new Date() }); // 验证一下,Map里的posts已经更新了 console.log(userDB.get('someUserID').posts); // 会输出包含新添加的post的数组
为什么能这么做?简单说:当你用.get()取出用户对象时,拿到的是这个对象在内存中的引用,对它的posts数组做的任何修改(比如push、splice、直接赋值),都会直接作用于Map中存储的那个对象上——因为它们本质上是同一个东西。
那什么时候需要用.set()?只有当你要替换整个用户对象的时候才需要,比如:
// 替换整个用户对象,这时候需要用.set() userDB.set('someUserID', { id: 'Marty', password: 'newHashedPassword', friends: [], posts: [] });
总结一下操作步骤:
- 用
.get(userId)取出对应的用户对象 - 直接操作对象里的
posts数组(push、unshift等方法都可以) - 完成,不需要额外的
.set()操作
这样既简洁又高效,完全不用做多余的取存操作~
内容的提问来源于stack exchange,提问作者Olav Martinius Tomter
相关产品推荐
相关产品推荐

