Mongoose:变量赋值

这很简单,所以如果你能找到一个重复的,请发布它(因为我不能)。


所以我有一个从数据库接收的对象,我想在代码中设置一个等于简单变量的值,而不是引用整个东西(注意 user.info 实际上是一个嵌套在里面的对象数组)。


let bar = user.info.foo.bar;

假设 bar (foo.bar) 未定义,但在模式中设置为字符串类型。我想将 bar (foo.bar) 分配给一个名为“foo”的字符串,因此(在我看来)逻辑上,我将 bar 设置为等于“foo”;


bar = "foo";

当我这样做并记录 bar 和实际值(user.info.foo.bar)时,我得到:


console.log(bar); // "foo"

console.log(user.info.foo.bar) // undefined

为什么 bar 被定义但 user.info.foo.bar 却没有,即使它们彼此相等?


user.info 没有问题(已定义)。


翻过高山走不出你
浏览 172回答 3
3回答

holdtom

我想出了一个解决方法我真正想要的是为 user.info.foo.bar 分配“foo”的值,而不是直接为它分配那个值。我可以通过使“bar”成为一个函数并将一个值传递给它并将 user.info.foo.bar 设置为该值来解决问题;const bar = (value)=>{  user.info.foo.bar = value;  return value}如果我这样做,我可以使用我想要的任何值调用 bar,并且 user.info.foo.bar 将等于该值,而无需直接将其设置为等于该值(这是我真正想要的)。结果:console.log(bar("foo")); // "foo"console.log(user.info.foo.bar); // "foo"

呼唤远方

为避免数据库中原始对象发生突变,请先克隆它。解决方法如下:let userInfo = {...user.info}let bar = 'foo'userInfo.foo.bar = barN/B:“bar”是一个新的内存地址,因此重新分配对数据库中的“user.info”对象没有影响。

侃侃尔雅

当你分配let bar = user.info.foo.bar;bar 的值用 user.info.foo.bar 的当前值更新。. 当您更改 bar 的值时,它不会反映出来,因为我们没有添加任何内容来修改 user.info.foo.bar 的值。你可以做的是设置user.info.foo.bar="foo";let bar = user.info.foo.bar;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript