我正在用 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}
联系人对象,但如果我输入的是 Jim 而不是 James,它将不会返回任何内容,除非我执行了两个单独的 JSONPath 查询——一个针对名称,另一个针对电子邮件。
我正在寻找的是一种使用 JSONPath 执行 OR 运算符的优雅方法,因此我可以针对多个 JSON 属性值测试单个字符串。
这是描述我正在寻找的东西的伪代码(非工作) :
var search_path = '$.*[?( /' + input + '/i.test([ @.name, @.email ]))]';
有谁知道这样做的方法?