You need to enable JavaScript to run this app. 如何使用UnderscoreJS的omit结合条件实现合并并改写成函数式单行代码
优惠活动
大模型
产品
解决方案
定价
更多

如何使用UnderscoreJS的omit结合条件实现合并并改写成函数式单行代码

实现方案

基于Lodash的单行函数式实现

原有代码存在直接修改临时对象的副作用,不符合函数式纯函数、无状态无副作用的要求,以下实现全程生成新对象,无副作用,逻辑和原有逻辑完全对齐:

const result = _.chain(objB).omitBy((v, k) => objA[k] === v).thru(o => Object.assign({}, o, o.name ? {date: '19780708'} : {}, o.currency ? {currency2: 'USD'} : {})).value();

逻辑说明:

  • 先用omitBy过滤掉objB中与objA键值全等的属性,和原有过滤逻辑完全一致
  • 用thru接收过滤后的对象,通过Object.assign生成全新对象,根据对象是否存在name/currency属性追加对应字段,全程不会修改任何原有对象
  • 最后调用value取出最终处理结果

原生JS单行实现(无需依赖Lodash)

如果不想依赖第三方库,可以用原生API实现相同效果,通过立即执行函数完成处理,全程无副作用:

const result = ((o) => Object.assign({}, o, o.name && {date: '19780708'}, o.currency && {currency2: 'USD'}))(Object.fromEntries(Object.entries(objB).filter(([k, v]) => objA[k] !== v)))

内容的提问来源于stack exchange,提问作者jlc488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 17:39:05