当前位置:  开发笔记 > 编程语言 > 正文

Object.assign未按预期工作

如何解决《Object.assign未按预期工作》经验,为你挑选了1个好方法。

我有一个名为bookings的对象,在其中我有几个属性,我想用Object.assign扩展,如下所示:

let data = Object.assign(booking, {
  hiw: event.hiw[booking.locale],
  tip: event.tip[booking.locale],
  start: moment(event.start).format('L')
});

但是,当我打印数据,结果将是从源头(预订)相同的对象,所以hiw,tipstart将被忽略,但是...如果我尝试做:

let data = Object.assign({}, {
  hiw: event.hiw[booking.locale],
  tip: event.tip[booking.locale],
  start: moment(event.start).format('L')
});

这将是完美的.

我的问题是:我在这里做错了什么?为什么我不能扩展booking,我可以扩展空对象?

这绝对不是异步代码的问题,当我尝试扩展预订时,他已经存在所有属性.

我也试图使用下划线extend方法,行为完全相同.



1> robertklep..:

Mongoose文档(模型实例)很特殊:它们只打印模式中存在的属性.

如果没有在那里定义属性,那么它们就不会出现console.log()(如果你将文档转换为普通的JS对象,也不会出现obj.toObject()).

这意味着Object.assign()只有在分配了架构中也存在的属性时才使用.未声明的任何属性都不会显示(也不会保存到数据库中).

如果您打算将文档用于输出,则应在分配之前将其转换为正确的JS对象:

let data = Object.assign(booking.toObject(), {
  hiw   : event.hiw[booking.locale],
  tip   : event.tip[booking.locale],
  start : moment(event.start).format('L')
});

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有