Javascript lodash:使用pickBy筛选对象中的对象

Javascript lodash:使用pickBy筛选对象中的对象,javascript,lodash,Javascript,Lodash,我正在尝试使用“lodash”:“^4.17.10”筛选对象 请参见下面我的最低可行示例: const obj={ "2": { “标题”:“GeForce GTX 1070 SC游戏ACX 3.0黑色版”, “类别”:[{ “术语id”:34, “名称”:“图形卡”, “slug”:“图形卡”, “术语组”:0, }], “货币”:“$”, “价格”:“547.85”, “瓦特”:“0”, }, "3": { “标题”:“GeForce白色版”, “类别”:[{ “术语id”:32, “姓名

我正在尝试使用
“lodash”:“^4.17.10”
筛选对象

请参见下面我的最低可行示例:

const obj={
"2": {
“标题”:“GeForce GTX 1070 SC游戏ACX 3.0黑色版”,
“类别”:[{
“术语id”:34,
“名称”:“图形卡”,
“slug”:“图形卡”,
“术语组”:0,
}],
“货币”:“$”,
“价格”:“547.85”,
“瓦特”:“0”,
},
"3": {
“标题”:“GeForce白色版”,
“类别”:[{
“术语id”:32,
“姓名”:“其他卡”,
“slug”:“其他卡”,
“术语组”:0,
}],
“货币”:“$”,
“价格”:“600.85”,
“瓦特”:“0”,
}
}
让allGpuParts=u.pickBy(obj,(值,键)=>{
return uu.startsWith(key.category,“图形卡”)
})
console.log(“allgpupart”)
console.log(allGpuParts)

您可以使用
.filter
.isMatch
来查找您要查找的键值对
有些只意味着如果有匹配项
返回true

const obj={
"2": {
“标题”:“GeForce GTX 1070 SC游戏ACX 3.0黑色版”,
“类别”:[{
“术语id”:34,
“名称”:“图形卡”,
“slug”:“图形卡”,
“术语组”:0,
}],
“货币”:“$”,
“价格”:“547.85”,
“瓦特”:“0”,
},
"3": {
“标题”:“GeForce白色版”,
“类别”:[{
“术语id”:32,
“姓名”:“其他卡”,
“slug”:“其他卡”,
“术语组”:0,
}],
“货币”:“$”,
“价格”:“600.85”,
“瓦特”:“0”,
}
}
const isGPU=o=>uu.isMatch(o,{slug:“图形卡”});
const allGpuParts=u.filter(obj,({category})=>category.some(isGPU));
console.log(“allgpupart”)
console.log(allGpuParts)
  • category是一个对象数组,因此您需要以某种方式对其进行迭代,例如,通过使用查找是否有符合条件的项
  • 您需要检查slug本身,而不是测试字符串和对象类别
我保留了startsWith测试,尽管您当前的示例也可以使用精确匹配

const graphicCategory = cat => cat.slug.startsWith('graphic-card'); // true or false test

_.pickBy(
    obj, // your object
    value => value.category.some(graphicCategory) // pick if some category has graphic-card
); // {2: { ... }}