javascript - obj.key=value 和 obj.set(key, value) 之间的区别?

标签 javascript arrays json object ecmascript-6

因此,在尝试更新 mongoose 中的文档时,我意识到当我对使用 Model.findOne() 获得的文档执行 obj.key=value 时,它不会将属性分配给它的值。但是在尝试 obj.set(key, value) 之后,该属性被分配给其在文档中的值。那么这是为什么呢?通常,当我对对象执行第一个方法时,该对象会获取该属性。 .set() 函数是什么?和 Mongoose 有关系吗?

//this works
async function updateItem(){
        let updatedItem = await Item.findOne({name:req.body.itemName});
        Object.entries(req.body).forEach(elem=>{
            if(elem[0]!=="itemName"){
                updatedItem.set(elem[0], elem[1]);
            };
        });
    };
    updateItem();
});


//this doesn't work
async function updateItem(){
        let updatedItem = await Item.findOne({name:req.body.itemName});
        Object.entries(req.body).forEach(elem=>{
            if(elem[0]!=="itemName"){
                updatedItem.elem[0] = elem[1];
            };
        });
    };
    updateItem();
});

最佳答案

这意味着 updatedItem 不是一个对象,而是一个 Map ,并且要将项目添加到Map,您需要使用 get方法。

另一件事需要指出的是,当您设置 updatedItem.elem[0] 时,您实际上是在尝试添加键 "elem[0 ]"updatedItem。要解决此问题,您需要使用带方括号的动态属性表示法:

updatedItem[elem[0]] = elem[1];

这将创建一个新键,其elem[0],而不是elem[0] .

关于javascript - obj.key=value 和 obj.set(key, value) 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55777934/

相关文章:

python - 在 numpy 二维数组的每一行中放置一个的快速方法

c# Array.IndexOf(Array,item) 如果没有匹配则需要最接近的项目

java - 使用 Map 值处理 Map

json - Json.Encode 缺少 mvc 4 程序集引用

javascript - jQuery 侧边栏 - 默认情况下隐藏它的问题

javascript - Apps 脚本中的类型转换

javascript - Blob URL 不适用于 Android 浏览器

javascript - 使用地理编码器时添加多个标记以 react 谷歌地图

arrays - 在 2D Lua 表中查看越界

java - SwaggerGen 枚举生成空数据类型