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

时间:2019-04-20 21:33:34

标签: javascript arrays json object ecmascript-6

因此,当尝试用猫鼬更新文档时,我意识到,对通过obj.key=value获取的文档执行Model.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();
});

1 个答案:

答案 0 :(得分:1)

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

要指出的另一件事是,当您设置updatedItem.elem[0]时,您从字面上看试图将密钥"elem[0]"添加到updatedItem。要解决此问题,您需要在方括号中使用动态属性符号:

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

这将创建一个具有elem[0] value 的新密钥,而不是 key elem[0]的一个密钥。