You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Lodash移除对象中不存在于参考对象的键?

如何用Lodash移除对象中不存在于另一对象的冗余键?

问题描述

现有两个对象:

const obj1 = { foo: 'Foo', bar: { baz: 'Baz', } }
const obj2 = { foo: 'Foo', bar: { baz: 'Baz', zip: 'Zip' }, }

需求为移除obj2中不存在于obj1的键(如示例中的zip),请问是否可以通过Lodash实现该功能?

补充说明:若属性为对象,则在两个对象中均为对象,不会出现同一键对应不同类型值的情况;实际应用场景为翻译文件处理,当在原始对象(即obj1)中删除某些项后,需要同步移除其他对象(如obj2)中对应的冗余项。


回答

当然可以用Lodash实现这个需求!而且针对你这种嵌套对象的场景,我们可以结合Lodash的工具方法+递归逻辑,轻松搞定多层对象的冗余键同步移除,完全适配翻译文件的处理场景。这里给你两种实用的实现方案:

方案1:递归结合_.pick深度拾取有效键

这个思路是逐层对比两个对象,只保留obj1(模板对象)中存在的键,嵌套对象则递归处理:

const _ = require('lodash');

function syncRemoveRedundantKeys(targetObj, templateObj) {
  // 如果当前值不是纯对象,直接返回(已知类型和模板一致)
  if (!_.isPlainObject(targetObj)) return targetObj;

  // 获取模板对象的所有键,从目标对象中先拾取这些键
  const validKeys = Object.keys(templateObj);
  const picked = _.pick(targetObj, validKeys);

  // 遍历拾取后的结果,递归处理嵌套对象
  return _.mapValues(picked, (value, key) => {
    return syncRemoveRedundantKeys(value, templateObj[key]);
  });
}

// 测试示例
const obj1 = { foo: 'Foo', bar: { baz: 'Baz' } };
const obj2 = { foo: 'Foo', bar: { baz: 'Baz', zip: 'Zip' } };

const cleanedObj = syncRemoveRedundantKeys(obj2, obj1);
console.log(cleanedObj);
// 输出:{ foo: 'Foo', bar: { baz: 'Baz' } }

方案2:用_.mergeWith反向过滤冗余项

另一种思路是借助_.mergeWith的自定义合并逻辑,只保留模板对象中存在的属性:

const _ = require('lodash');

function filterRedundantProperties(target, template) {
  const result = {};

  _.mergeWith(result, target, (_, srcValue, key) => {
    // 如果模板中没有这个键,返回undefined表示忽略该属性
    if (!_.has(template, key)) return undefined;

    // 嵌套对象递归处理
    if (_.isPlainObject(srcValue) && _.isPlainObject(template[key])) {
      return filterRedundantProperties(srcValue, template[key]);
    }

    // 非对象类型直接保留原值
    return srcValue;
  });

  return result;
}

// 测试同样有效
const cleanedObj = filterRedundantProperties(obj2, obj1);
console.log(cleanedObj);
// 输出:{ foo: 'Foo', bar: { baz: 'Baz' } }

这两种方案都能完美处理多层嵌套的场景,不管你的翻译文件层级有多深,只要原始对象删掉了某个项,其他翻译文件对应的冗余内容都会被同步移除。而且因为你已经明确不会出现同键不同类型的情况,所以不需要额外处理类型不匹配的边界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:34:05