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

如何用Lodash从对象提取指定键子对象并获取未匹配键数组?

用Lodash提取指定字段并找出缺失字段

嘿,这事儿用Lodash处理起来特别顺手,我给你分享两种实用的实现方式,完全贴合你的需求:

方法一:用_.pick和_.difference(最简洁直观)

这两个都是Lodash的高频工具函数,组合起来刚好能解决你的问题:

const _ = require('lodash');

const state = {id: '123', number: '456', extra_field: 'value'};
const fields = ["id", "number", "identifier"];

// 从state中提取fields里存在的键,生成目标子对象
const data = _.pick(state, fields);
// 找出fields里不存在于state中的键,生成缺失字段数组
const missing_fields = _.difference(fields, Object.keys(state));

console.log(data); // 输出: {id: '123', number: '456'}
console.log(missing_fields); // 输出: ['identifier']

解释:

  • _.pick(state, fields):会自动筛选出state中包含在fields里的键值对,不存在的键直接忽略,完美生成你要的data对象。
  • _.difference(fields, Object.keys(state)):对比两个数组,返回fields中有但state的键集合里没有的元素,刚好就是缺失的字段。

方法二:用_.reduce一次性遍历处理

如果想只遍历一次fields数组完成两个操作(性能上略优,适合大规模数据),可以用_.reduce:

const _ = require('lodash');

const state = {id: '123', number: '456', extra_field: 'value'};
const fields = ["id", "number", "identifier"];

const { data, missing_fields } = _.reduce(fields, (acc, key) => {
  // 检查state是否包含当前键
  if (_.has(state, key)) {
    acc.data[key] = state[key];
  } else {
    acc.missing_fields.push(key);
  }
  return acc;
}, { data: {}, missing_fields: [] });

console.log(data); // 输出: {id: '123', number: '456'}
console.log(missing_fields); // 输出: ['identifier']

解释:

  • 我们初始化一个累加器对象,包含空的data和missing_fields。
  • 遍历fields里的每个键,用_.has检查是否存在于state中:存在就加入data,不存在就推入missing_fields。
  • 最后解构累加器就能得到需要的两个结果。

两种方法都能完美满足你的需求,看你更喜欢哪种风格~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:27:30