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

问题描述 投票:0回答:1

因此,当我尝试用mongoose更新文档时,我意识到当我将obj.key=valueModel.findOne()获取的文档时,它并没有将属性分配给它的值。但是在尝试obj.set(key,value)之后,属性被赋值给文档中的值。那为什么呢?通常当我对对象执行第一个方法时,对象获取属性。什么是.set()功能?它与猫鼬有关吗?

//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();
});
javascript arrays json object ecmascript-6
1个回答
1
投票

这意味着updatedItem不是一个对象,它是一个Map,并且要向Map添加项目,你需要使用get方法。

另外要指出的是,当你设置updatedItem.elem[0]时,你真的试图将关键"elem[0]"添加到updatedItem。要解决此问题,您需要使用带方括号的动态属性表示法:

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

这使得一个新密钥的值为elem[0],而不是密钥为elem[0]

© www.soinside.com 2019 - 2024. All rights reserved.