lodash - 如何_.filter子节点并从json文件返回所有父节点?

时间:2017-01-18 06:44:56

标签: javascript json node.js express lodash

我创建了route.js文件。基于queryString,它必须过滤Json对象。当我使用_.filter方法时,它将整个对象作为响应返回。实际上我想要过滤那个productlist节点并将剩余的节点作为响应包含在内 请帮助我..提前致谢...

这是代码..

JSON文件

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

route.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){
//
});

1 个答案:

答案 0 :(得分:0)

这里的问题是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方法来浅析您的{ {1}}对象,然后分别使用jsonFile函数返回的值和productList结果的长度覆盖FilteredProductsfilterByProduct属性。这就是我想出的:

filterByProduct