2016-04-11 5 views
0

私は、エクスプレスjsアプリケーションでアンダースコアを使用して、前のページからのユーザー入力に応じてjsonファイルをフィルタリングします。これは私がこれまで何をやったかである:ノード/ expressjsのjsonオブジェクトをフィルタリングする

var fs = require('fs'); 
var contents = fs.readFileSync("public/files/testFile.json"); 
var obj = JSON.parse(contents); 
var gender = req.query.gender 

var filtered = _.where(obj.elements, {gender: true}); // elements is the array I want to filter 

私はフィルターにしようとしているJSONは以下の通りです:私はときに、同じ男」で変数性別を変更すること

{ 
    "elements": [ 
    { 
     "id": 0, 
     "man": true, 
     "url": "https://pbs.twimg.com/media/CfRi_u8aaW8AfQvI7v.jpg" 
    }, 
    { 
     "id": 1, 
     "Woman": true, 
     "url": "https://pbs.twimg.com/media/CfZ-8ikafWsAAngQGP.jpg" 
    } 
] 
} 

お知らせ"これは正しく機能します。このような検索のために変数を使うのはうまくいきません。 2つの質問があります:

  1. 私はそれを動作させるために何ができますか?
  2. 問題を解決するには、より良い方法がありますか?
+0

JSON –

+2

データキャリアとしてキーを誤用する古典的なケースを示してください。オブジェクトのキーを "man"と "woman"と呼ぶべきではありません。それがデータです。それを「ジェンダー」と呼び、異なる価値を与えます。 – Tomalak

+0

これはそれを行うより効率的な方法ですが、依然としてフィルタリングの問題を解決していません。私が探しているのは、いくつかの新しいフィールドを追加することです。このようなフィルタリングが最善の選択肢かどうかわかりません。 – ZanattMan

答えて

3

あなたは次のことを試みてはいけない理由:

var _ = require('underscore'); 
var elem = { 
    "elements": [ 
     { 
      "id" : 0, 
      "man": true, 
      "url": "https://pbs.twimg.com/media/CfRi_u8W8AQvI7v.jpg" 
     }, 
     { 
      "id" : 1, 
      "woman": true, 
      "url" : "https://pbs.twimg.com/media/CfZ-8ikWsAAnQGP.jpg" 
     } 
    ] 
}; 
var gender = 'man'; 
var filtered = _.filter(elem.elements, function(element){ 
    return _.has(element, gender) && element[gender] === true; 
}); 
console.log(filtered); 

私はここに性別の値をハードコーディングしました。あなたはあなたのアプリのクエリからそれを読むことができます。私はスニペットがかなり自明であると思う。

+0

これは問題を解決し、問題を解決します。ありがとう! 2番目の質問にはまだ答えがありませんが。これはこれを行う最善の方法ですか?私はより多くの変数を追加する予定です... – ZanattMan

+0

パフォーマンスが第一の関心事である場合は、性別=>要素のハッシュを作成することをお勧めします。すべてのリクエストのリスト。それ以外にも、他の人が触れたように、キーは理想的にはあなたのデータとして価値のあるジェンダーであるべきです。 –

0

新しいJsonオブジェクトを作成できます。

var obj = {}; 
obj[req.query.gender] = true; 
var filtered = _.where(obj.elements, obj); 

私は、Male:trueまたはFemale:trueではなく、Male/Femaleの値を持つGenderフィールドを使用することをおすすめします。

+0

これを使用すると、フィルタリングが機能しなくなります。この呼び出しはjsonオブジェクトをそのまま返します。 – ZanattMan

+0

ノードがジェンダー変数を「性別」として解釈しているため、存在しない「性別」フィールドでJSONをフィルタリングしようとしています。 –

関連する問題