Lodash - 如何_.filter孩子并从JSON文件返回所有父母



我已经创建了路由.js文件。基于queryString,它必须过滤Json对象。当我使用 _.filter 方法时,它返回整个对象作为响应。实际上,我想过滤该产品列表节点并包含其余节点作为响应请帮助我..提前致谢...

这是代码..

JSON 文件

{
    "productList": [
        {
            "productName": "xyz",
            "productType": "mobile"
        },
        {
            "productName": "xyz",
            "productType": "mobile"
        },
        {
            "productName": "xyz",
            "productType": "mobile"
        }
    ],
    "totalProducts": 3,
    "FilteredProducts": 0,
    "test1": 11,
    "test11": 12,
    "test33": 13
}

路线.js

var filterByProduct = function(coll, productType){
    return  _.forEach(coll, function(o){
        return _.find(o, function(item){
        });
    });
};
var queryString = function(req, res, next) {
    if (req.query.productType ) {
        var stringObj = JSON.stringify(filterByProduct(jsonFile, req.query.productType),null,4);
        res.end(stringObj);
    } else if (req.query !== {}) {
        var stringObj = JSON.stringify(jsonFile,null,4);
        res.end(stringObj);
    } else {
        res.end('Not a Query String');
    }
}
router.get('/test', queryString, function(req,res){
//
});

这里的问题是filterByProduct参数coll没有绑定到productList数组,而是绑定到包含productList数组以及其他节点的顶级对象。因此,您应该改为定位coll.productList

此外,使用您最初提到的_.filter(在 coll.productList 上)比使用 _.forEach 更好,因为它循环访问数组并过滤项目。请尝试以下版本的filterByProduct

var filterByProduct = function(coll, productType){
    return _.filter(coll.productList, function(o) {
        return o.productType === productType;
    })
};

最后,要返回一个类似于 JSON 数据文件的对象,该文件具有 productList 节点的过滤版本以及其他顶级节点,您可以使用 _.clone 方法浅表克隆 jsonFile 对象,然后用 filterByProduct 函数返回的值和 filterByProduct 结果的长度覆盖 productListFilteredProducts 属性, 分别。这是我想到的:

if (req.query.productType) {
    var stringObj = _.clone(jsonFile);
    stringObj.productList = filterByProduct(jsonFile, req.query.productType);
    stringObj.FilteredProducts = stringObj.productList.length;
    res.end(stringObj);
}

最新更新