JavaScript で検索候補テキスト ボックス コントロールを作成しており、ユーザーが入力した文字列をユーザーの連絡先リストを表す JSON オブジェクトと比較する方法を見つけようとしています。
JSON オブジェクトは次のようになります。
var contacts = {
'gmail' : [
{ name : 'Joe Smith', email : 'joe.smith@gmail.com' },
{ name : 'James Simpson', email : 'jim.simpson@gmail.com' }
]
}
JSONPath を使用して、ユーザーが入力した文字列を連絡先オブジェクトの 1 つのフィールドと比較することに成功しました (つまり、名前または電子メールをテストできます)。
var input = "james";
var search_path = '$.*[?( /' + input + '/i.test(@.name))]';
var results = jsonPath(contacts ,search_path, {resultType:"VALUE"});
これは連絡先オブジェクトを返しますが{James Simpson}
、James の代わりに Jim と入力した場合、2 つの個別の JSONPath クエリ (1 つは名前に対して、もう 1 つは電子メールに対して) を実行しない限り、何も返されません。
私が探しているのは、JSONPath で OR 演算子を実行するエレガントな方法です。これにより、単一の文字列を複数の JSON プロパティ値に対してテストできます。
これは、私が探しているものを説明する疑似コード(動作していない)です。
var search_path = '$.*[?( /' + input + '/i.test([ @.name, @.email ]))]';
これを行う方法を知っている人はいますか?