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

如何使用Lodash pickBy过滤含嵌套分类的对象?

用Lodash ^4.17.10过滤对象的正确姿势

首先我猜你的数据结构大概是类似这样的——一个以字符串为键的对象,每个值都包含category嵌套属性:

const yourObject = {
  "1": { name: "普通商品", category: { slug: "other-category" } },
  "2": { name: "显卡", category: { slug: "graphic-card" } },
  "3": { name: "外设配件", category: { slug: "accessory" } }
};

你之前的代码没返回结果,大概率是直接用_.filter处理对象了——但Lodash的_.filter默认是给数组设计的,直接处理对象不会按预期遍历所有键值对。下面给你两种适配4.17.10版本的正确实现方式:

方式一:用_.pickBy(最简洁直接)

_.pickBy是专门用来过滤对象的方法,会保留所有回调返回true的键值对,完美匹配你的需求:

const _ = require('lodash');

// 安全版:用_.get避免嵌套属性不存在时报错
const filteredResult = _.pickBy(yourObject, (value, key) => {
  return key === "2" && _.get(value, 'category.slug') === "graphic-card";
});

// 如果你能确保所有数据项都有category属性,可以简化成:
// const filteredResult = _.pickBy(yourObject, (value, key) => {
//   return key === "2" && value.category.slug === "graphic-card";
// });

执行后filteredResult就是只包含键"2"且符合category条件的对象;如果没匹配到任何结果,会返回空对象{}。

方式二:先转数组再过滤(适合复杂逻辑场景)

如果后续需要扩展更复杂的过滤规则,可以先把对象转成键值对数组,过滤后再转回对象:

// 把对象转换为[[key, value]]格式的数组
const objectEntries = _.entries(yourObject);
// 过滤符合条件的键值对
const matchedEntries = _.filter(objectEntries, ([key, value]) => {
  return key === "2" && _.get(value, 'category.slug') === "graphic-card";
});
// 把过滤后的数组转回对象
const filteredResult = _.fromPairs(matchedEntries);

额外小技巧:单个目标键的快速判断

如果你确定键"2"一定存在,也可以直接检查它的属性后提取结果:

const targetItem = yourObject["2"];
const filteredResult = targetItem && _.get(targetItem, 'category.slug') === "graphic-card" 
  ? { "2": targetItem } 
  : {};

内容的提问来源于stack exchange,提问作者Carol.Kar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:47:33