2012-01-19 1 views
2

複数のキーワードを使用してJsonをフィルタリングして検索したいと思います。チェックする価値が1つしかない場合は、私はそれが働いているが、私は複数のキーワード検索フィルターを使用する必要があります。Jquery Grep&Map Json複数のキーワードを使用する

この例では、米国のウォルマートや中国のターゲットではなく、ウォルマートや中国に関連するオブジェクトを返したいとします。

Grep()を使用してフィルタリングするキーワードの配列を作成し、それをコンソールでマップします。私は、自分のアプリケーションで

<!DOCTYPE html> 

<head> 
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script> 
<script> 

var keywords = ["China", "Wal-Mart"];//filter Json by these terms 

var data = [ 
    { 
    "name": "Store #1", 
    "country": "China", 
    "retailer": "Wal-Mart" 
    }, 
    { 
    "name": "New Store #2", 
    "country": "China", 
    "retailer": "Wal-Mart" 
    }, 
    { 
    "name": "Store Name US", 
    "country": "United States", 
    "retailer": "Wal-Mart" 
    }, 
    { 
    "name": "Target #98237", 
    "country": "China", 
    "retailer": "Target" 
    } 
] 
var searchkeywords = $.grep(data, function(value,i) { 

return value[i] === keywords[i];//<--- This is not right 

//should be the equivalent of above keywords: 
//return value.country.toLowerCase() === "china" && value.retailer.toLowerCase() === "wal-mart" 
}); 

var keywordsearchresult = $.map(searchkeywords, function(value, i) { 
    return { 
     name: value.name, 
     country: value.country, 
     retailer: value.retailer 
    }; 
}); 
console.log(keywordsearchresult);//should return first 2 items 
</script> 
</head> 

<body> 
</body> 
</html> 

(「これは適切ではない」、以下の私のコメントを参照)がキーワードに対する値をチェックする構文を把握することはできません複数のキーワードやアイテム(タイプ、日付があるでしょう等).Jsonでは、これは単なる単純化されたバージョンです。基本的にGrepに多くのルールと条件を追加したいと思っています。

答えて

2

あなたの主な問題は、検索用語がフィルタリングされるはずのフィールドを示していないことです。

var keywords = [ 
    { 
     field: "country", 
     value: "China" 
    }, 
    { 
     field: "retailer", 
     value: "Wal-Mart" 
    } 
]; 

これにより、各単語の適切なフィールドを検索することができます。そして、あなたはこれにあなたのgrepを変更することができます。私はそれのための任意の使用を見ることができないので、私はmap一部を削除した

var results = $.grep(data, function(value, i) { 
    for(var i=0;i<keywords.length;i++){ 
     if(value[keywords[i].field] !== keywords[i].value){ 
      return false 
     } 
    } 

    return true;   
}); 

。次に、あなたはこのままになります:

http://jsfiddle.net/kZWef/

+0

ありがとう!私はマップを使ってhtmlテンプレートをレンダリングしていました。しかし代わりに、代わりに結果をvarオブジェクトとして使用して、代入することができます。 – User970008

+0

国を使用して2つのキーワードを検索するにはどうすればよいですか?私は返すしたい場合たとえば、どこの国=米国や中国のvarキーワード= [ { フィールド: "国"、 値: "中国" }、 \t { フィールド: "国"、 値: " United States " } ]; – User970008

+0

'value'を配列' {field: "country"、value:["China"、 "United States"]} 'にすることができます。 –

関連する問題