Lodash _.merge 函数不会用更新的信息覆盖属性

Lodash _.merge function not overwriting properties with updated information

在我的用户编辑路径中,我尝试使用 Lodash 合并功能用 req.body 中发送的更新来更新返回的用户文档(来自 Mongoose)。这是我的代码:

    const { dobYear, dobMonth, dobDay } = req.body;
    const dob = formatDob(dobYear, dobMonth, dobDay);

    const user = await db.User.findById(req.params.id); 

    const updates = pick(req.body, [ 'fullName', 'email', 'password', 'gender', 'address', 'avatar_url' ]);
    merge(user, [updates, dob]);
    let updatedUser = await user.save();

问题是即使我在请求中发送了更新的电子邮件,合并似乎并没有用新的电子邮件值(来自 updates)实际覆盖旧的电子邮件值。

merge(用户, [更新, dob]);.

用法不正确。接受以下内容:

Arguments

    object (Object): The destination object.
    [sources] (...Object): The source objects.

观察...,这意味着它接受可变数量的参数。

merge(user, updates, { dob })

您正试图以将参数传递给 merge 的方式将对象与数组合并。

See documentation。我假设您的困惑来自于他们在文档中有 _.merge(object, [sources]) 这一事实。但是,如果您在 Arguments 部分看到它们有:

[sources] (...Object): The source objects. 表示对象列表而不是实际数组。

试试这个:

var user = { 'a': 1, 'b': 2 };     
var updates = { 'a': 3, 'c': 4, 'email': 'aaa@bbb.com' };
let dob = '11-11-2019'

let result = _.merge(user, updates, {dob});  // <-- ...Object

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>