首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pickBy过滤对象中的对象

使用pickBy过滤对象中的对象
EN

Stack Overflow用户
提问于 2018-05-31 17:56:34
回答 2查看 2.7K关注 0票数 1

我正在尝试使用"lodash": "^4.17.10"来过滤对象。

见下面我的最低可行的例子:

代码语言:javascript
复制
const obj = {
    "2": {
        "title": "GeForce GTX 1070 SC GAMING ACX 3.0 Black Edition",
        "category": [{
            "term_id": 34,
            "name": "Graphic Card",
            "slug": "graphic-card",
            "term_group": 0,
        }],
        "currency": "$",
        "price": "547.85",
        "watt": "0",
    },
    "3": {
        "title": "GeForce White Edition",
        "category": [{
            "term_id": 32,
            "name": "other-card",
            "slug": "other-card",
            "term_group": 0,
        }],
        "currency": "$",
        "price": "600.85",
        "watt": "0",
    }
}

let allGpuParts = _.pickBy(obj, (value, key) => {
    return _.startsWith(key.category, "graphic-card")
})

console.log("allGpuParts")
console.log(allGpuParts)
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

正如您目前可以看到的,没有返回任何结果。我只想要回对象"2":,它有弹格"slug": "graphic-card"

有什么建议吗?如何与房客过滤?

谢谢你的回复!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 18:15:07

您只需使用_.filter_.isMatch来查找要查找的键值对,_.some就意味着是否有匹配的return true

代码语言:javascript
复制
const obj = {
    "2": {
        "title": "GeForce GTX 1070 SC GAMING ACX 3.0 Black Edition",
        "category": [{
            "term_id": 34,
            "name": "Graphic Card",
            "slug": "graphic-card",
            "term_group": 0,
        }],
        "currency": "$",
        "price": "547.85",
        "watt": "0",
    },
    "3": {
        "title": "GeForce White Edition",
        "category": [{
            "term_id": 32,
            "name": "other-card",
            "slug": "other-card",
            "term_group": 0,
        }],
        "currency": "$",
        "price": "600.85",
        "watt": "0",
    }
}

const isGPU = o => _.isMatch(o, {slug: "graphic-card"});
const allGpuParts = _.filter(obj, ({category}) => category.some(isGPU));

console.log("allGpuParts")
console.log(allGpuParts)
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

如果我误解了,或者有什么问题,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2018-05-31 19:13:19

我保留了一个startsWith测试,尽管您当前的示例也可以与一个完全匹配的

代码语言:javascript
复制
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: { ... }}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50630165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档