是否存在Lodash方法可实现用source覆盖dest的所有已有属性?
用Lodash实现指定属性覆盖的方法
你的需求是仅用source对象中与dest对象同名的属性值覆盖dest的对应属性,Lodash中可以直接通过组合方法实现,甚至有更简洁的写法替代你给出的代码:
等价实现
_.assign(dest, _.pick(source, _.keys(dest)))
和你原代码逻辑完全一致,只是用_.keys(dest)替代了原生的Object.keys(dest),两者效果相同。
自定义封装(可选)
Lodash没有专门的单一方法直接完成这个操作,但可以用_.transform封装成更易用的自定义函数:
const pickAndAssign = (dest, source) => _.transform(dest, (res, _, key) => { if (source.hasOwnProperty(key)) { res[key] = source[key]; } }, dest);
调用时直接执行pickAndAssign(dest, source)即可,逻辑和原代码完全匹配。
嵌套对象场景的扩展
如果需要递归处理嵌套对象的同名属性覆盖,可以改用_.merge配合_.pick:
_.merge(dest, _.pick(source, _.keys(dest)))
注意:_.merge是递归合并逻辑,和原代码的浅覆盖行为不同,需根据实际需求选择。
内容的提问来源于stack exchange,提问作者SimoneMSR
相关产品推荐
相关产品推荐

