Я создаю элемент управления для текстового поля с предложением поиска в JavaScript и пытаюсь найти способ сравнить строку, введенную пользователем, с объектом JSON, представляющим список контактов пользователя.
Объект JSON выглядит следующим образом:
var contacts = {
'gmail' : [
{ name : 'Joe Smith', email : 'joe.smith@gmail.com' },
{ name : 'James Simpson', email : 'jim.simpson@gmail.com' }
]
}
Используя JSONPath, я смог успешно сравнить введенную пользователем строку с одним полем в объекте контакта (т. Е. Я могу проверить имя или адрес электронной почты), используя следующее:
var input = "james";
var search_path = '$.*[?( /' + input + '/i.test(@.name))]';
var results = jsonPath(contacts ,search_path, {resultType:"VALUE"});
Возвращает объект контакта {James Simpson}
, но если бы я напечатал Джима вместо Джеймса, он бы ничего не возвратил, если бы я не выполнил два отдельных запроса JSONPath - один для имени, а другой для электронного письма.
То, что я ищу, - это элегантный способ сделать оператор OR с JSONPath, чтобы я мог протестировать одну строку для нескольких значений свойств JSON.
Вот псевдо-код (нерабочий) , который описывает то, что я ищу:
var search_path = '$.*[?( /' + input + '/i.test([ @.name, @.email ]))]';
Кто-нибудь знает способ сделать это?