lodash:使用pickBy过滤对象中的对象

安娜·克莱

我正在尝试使用"lodash": "^4.17.10"筛选对象。

请参阅以下我的最小可行示例:

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)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

如您所能,目前没有返回结果。我只想取回"2":有子弹的物体"slug": "graphic-card"

有什么建议如何用lodash过滤吗?

感谢您的答复!

乔·华纳

您可以使用_.filter_.isMatch查找要查找的键值对,_.some即表示是否匹配return true

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)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

如果我误解了或有任何疑问,请告诉我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章