我创建了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){
//
});
答案 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
结果的长度覆盖FilteredProducts
和filterByProduct
属性。这就是我想出的:
filterByProduct