2017-01-18 6 views
0

route.jsファイルを作成しました。 queryStringに基づいて、Jsonオブジェクトをフィルタリングする必要があります。 _.filterメソッドを使用すると、オブジェクト全体が応答として返されます。実際に私はここでは、コード..lodash - jsonファイルからすべての親を返します。

JSONファイル

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

...事前に感謝..私を助けてくださいことproductlistノードをフィルタリングしたいと回答 として残りのノードが含まれます

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

filterByProductパラメータcollproductListアレイにバインドされていませんが、productListアレイと他のノードを含む最上位オブジェクトにバインドされています。だから、代わりにcoll.productListをターゲットにする必要があります。それは、配列を反復処理し、アイテムをフィルタリングするので

はまた、あなたが最初に述べたように(coll.productList上)_.filterを使用すると、_.forEachを使用するよりも良いアイデアです。代わりにfilterByProductのこのバージョンをお試しください:

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

を最後に、productListのノードに加えて、他のトップレベルノードのフィルタされたバージョンを持っているあなたのJSONデータファイルに似たオブジェクトを返すために、あなたは浅いに_.cloneメソッドを使用することができますjsonFileオブジェクトをクローン化し、productListFilteredProductsプロパティを、filterByProduct関数から返された値と結果の長さをそれぞれfilterByProductに上書きします。ここに私が思いついたことがあります:

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

ありがとうございました。あなたは私を救った... – Learner17

+0

うれしい私は助けることができた! – foundling

関連する問題