javascript - 借助扩展运算符修改对象的属性会导致原始对象被修改吗?

标签 javascript arrays maps

抱歉,这个菜鸟问题,但是原始数组中的对象是如何修改的?我提取了小片段集。

  • 预期:mappedEvents.u 具有额外属性,而源 update 则没有
  • 发生:mappedEvents.uupdate.u 具有相同的值。

 const update= [
        {
            "_id": "2QK5mmqERN8dd6LaL",
            "open": true,
            "alert": false,
            "unread": 0,
            "userMentions": 0,
            "groupMentions": 0,
            "ts": "2019-09-20T03:20:50.927Z",
            "rid": "GENERAL",
            "name": "general",
            "t": "c",
            "u": {
                "_id": "5JzjbnZDcxKMYR2mv",
                "username": "honga",
                
            },
            "_updatedAt": "2020-01-02T06:34:53.747Z",
            "ls": "2020-01-02T06:34:53.681Z"
        },
        {
            "_id": "ox3hxbxdKpenLmyKT",
            "rid": "5JzjbnZDcxKMYR2mvyBShq8ZDfx9isv2sA",
            "u": {
                "_id": "5JzjbnZDcxKMYR2mv",
                "username": "honga",
                
            },
            "_updatedAt": "2020-01-16T10:32:43.414Z",
            "alert": false,
            "fname": "lolo",
            "groupMentions": 0,
            "ls": "2020-01-16T10:32:43.414Z",
            "name": "lol",
            "open": true,
            "t": "d",
            "ts": "2020-01-16T09:26:13.665Z",
            "unread": 0,
            "userMentions": 0
        }
    ];

const mappedEvents = update.map(e => {
  e.u = {...e.u,"avatarOrigin": "upload"};
  return e;
});
console.log({update});
console.log({mappedEvents});

最佳答案

代码仍在访问您修改 e.u 属性的原始元素的引用。这已经反射(reflect)在原始阵列上。如果您只想使用 .map() 创建新元素,那么您需要克隆当前元素以及从 .map() 作为参数获得的内容。

尝试以下操作:

const update = [{"_id": "2QK5mmqERN8dd6LaL","u": {"_id": "5JzjbnZDcxKMYR2mv","username": "honga"}},{"_id": "ox3hxbxdKpenLmyKT","u": {"_id": "5JzjbnZDcxKMYR2mv","username": "honga",}}];

const mappedEvents = update.map(e => {
  const newElem = {...e};
  newElem.u = {...e.u,"avatarOrigin": "upload"};
  return newElem;
});
console.log({update});
console.log({mappedEvents});

希望对您有所帮助!

关于javascript - 借助扩展运算符修改对象的属性会导致原始对象被修改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60064344/

相关文章:

javascript - 从服务器而非本地加载时的传单和移动图 block

javascript - 缩放时标记会漂移(不是自定义标记)

javascript - 追加文本 Javascript

javascript - 如何验证 FeathersJS 中的日期格式

javascript - 动态调整图像映射和图像的大小

Php 登录有效,但忽略 MySQL 脚本中的用户类型字段

android - 手机重启后谷歌地图应用程序崩溃

javascript - Bootstrap 表单在模式确认后提交

java - Collections.sort 有什么问题?

javascript - 如何在vue.js组件中动态添加属性