我已经创建了路由.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
结果的长度覆盖 productList
和 FilteredProducts
属性, 分别。这是我想到的:
if (req.query.productType) {
var stringObj = _.clone(jsonFile);
stringObj.productList = filterByProduct(jsonFile, req.query.productType);
stringObj.FilteredProducts = stringObj.productList.length;
res.end(stringObj);
}