为了账号安全,请及时绑定邮箱和手机立即绑定

Mongoose:变量赋值

Mongoose:变量赋值

翻过高山走不出你 2022-06-09 11:05:57
这很简单,所以如果你能找到一个重复的,请发布它(因为我不能)。所以我有一个从数据库接收的对象,我想在代码中设置一个等于简单变量的值,而不是引用整个东西(注意 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 没有问题(已定义)。
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

我想出了一个解决方法


我真正想要的是为 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"


查看完整回答
反对 回复 2022-06-09
?
呼唤远方

TA贡献1856条经验 获得超11个赞

为避免数据库中原始对象发生突变,请先克隆它。解决方法如下:


let userInfo = {...user.info}

let bar = 'foo'

userInfo.foo.bar = bar

N/B:“bar”是一个新的内存地址,因此重新分配对数据库中的“user.info”对象没有影响。


查看完整回答
反对 回复 2022-06-09
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

当你分配


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;


查看完整回答
反对 回复 2022-06-09
  • 3 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号