在JQuery中的数组内的数组中搜索

在JQuery中的数组内的数组中搜索,jquery,html,css,Jquery,Html,Css,您可以在此处查看/测试指向页面的直接链接: 我有以下JQuery: $(函数(){ $('input[type=radio]')。单击(函数(){ var r_id=$(“输入[@name=sc]:选中”).attr('id'); //警报(r_id) 现在,如果您检查JS代码,以下医生有多个专科: ... { "firstName": "Ahmad", "lastName": "Faqir", "status": "Provisional", "specialty": ["Internal M

您可以在此处查看/测试指向页面的直接链接:

我有以下JQuery:
$(函数(){ $('input[type=radio]')。单击(函数(){ var r_id=$(“输入[@name=sc]:选中”).attr('id'); //警报(r_id)

现在,如果您检查JS代码,以下医生有多个专科:

...
{
"firstName": "Ahmad",
"lastName": "Faqir",
"status": "Provisional",
"specialty": ["Internal Medicine", "Pediatrics"],
"address": "test test, Brooklyn NY 11218",
"phone": "456.673.4389"
}
...
当用户选择“内科学”或“儿科学”作为专业时,如何更改JQuery函数以确保他同时出现在两个选项中?

此外,以下JS不起作用:

...
                if (i == $(".dStatus").find('option:selected').attr('id')) { //if what's in the phyList array matches selection
                    fname = fname + phyList[test].firstName + "<br>";
                    lname = lname + phyList[test].lastName + "<br>";
                    stats = stats + phyList[test].status + "<br>";
                    spec = spec + phyList[test].specialty + "<br>";
                    addr = addr + phyList[test].address + "<br>";
                    phonen = phonen + phyList[test].phone + "<br>";

                    document.getElementById('first').innerHTML = fname;
                    document.getElementById('last').innerHTML = lname;
                    document.getElementById('status').innerHTML = stats;
                    document.getElementById('specialty').innerHTML = spec;
                    document.getElementById('address').innerHTML = addr;
                    document.getElementById('phone').innerHTML = phonen;
                    //alert ("ok");
                    document.getElementById('errorst').innerHTML = "";
                }
                else {
                    document.getElementById('errorst').innerHTML = "<i>No match found</i>";
                }
            }
...
。。。
if(i=$(“.dStatus”).find('option:selected').attr('id')){//如果phyList数组中的内容与所选内容匹配
fname=fname+phyList[test].firstName+“
”; lname=lname+phyList[test]。姓氏+“
”; stats=stats+phyList[test]。状态+“
”; spec=spec+phyList[测试]。专业+“
”; addr=addr+phyList[test]。地址+“
”; phonen=phonen+phyList[test]。phone+“
”; document.getElementById('first')。innerHTML=fname; document.getElementById('last')。innerHTML=lname; document.getElementById('status').innerHTML=stats; document.getElementById('speciality')。innerHTML=spec; document.getElementById('address')。innerHTML=addr; document.getElementById('phone')。innerHTML=phonen; //警报(“正常”); document.getElementById('errorst').innerHTML=“”; } 否则{ document.getElementById('errorst').innerHTML=“未找到匹配项”; } } ...
无论是否找到匹配项,它始终显示“未找到匹配项”消息


如何使其仅在未找到匹配项时显示消息?

可能出现问题的原因是您从未声明I。for循环应该这样开始:

for (test=0;test<=phyList.length-1;test++) {
   var i = phyList[test].specialty; //get all specialty in the array

for(test=0;test只是一个简单的示例,说明如何使用它来查找正确的对象

// value of dropdown
var spe = $('#test').val();

var matchedPhy = $.map(phyList, function (v, i) {
    // return object if string matches or string is in array
    return v.specialty == spe || $.inArray(spe,v.specialty) > -1 ? v: null;
});

if(matchedPhy.length){
    // found some results
}else{
    // found no results
} 

最后一段代码中的
if
表达式是什么?它被切断了。另外,以下JQuery不起作用:这不是一个JQuery,而是一个原始JS。@RickViscomi它是原始代码的一部分,不想扩展它。但是根据您的请求,我现在添加了它。@ArthurHalma谢谢,我更正了这个措辞。我应该添加另一个FOR循环吗在“我”之下?能给我举个例子吗?我会同时编辑我的。谢谢。我只想打印一次。所以如果选择了儿科,我希望医生的名字列一次。啊,我错过了,那么是的,第二个for循环会更好,当你找到匹配项时,将你的索引设置为超过你的最大值。(现在它只显示具有两个专业的医生,但跳过了其他专业)请检查并让我知道如何修复它。如果从专业中选择儿科,它应该显示三名医生。很高兴提供帮助,您可以通过将所有专业声明为数组并仅具有for循环来整理代码,但它现在可以正常工作:)它看起来很棒,而且正是我想要它做的……但是对于第三位医生,我可以只展示“儿科”吗而不是两种特性?我如何将其合并到这里:jsfiddle.net/5mBvqYou可以显示您想要的任何东西..我只是循环显示对象的键/值..但是您可以自定义它们来显示您想要的东西。@SiKni8这里有一个示例,说明了如何控制输出感谢您花了时间…但不幸的是,我不能请只选择一个正确答案。我非常感谢您抽出时间来帮助我。。。
...
                if (i == $(".dStatus").find('option:selected').attr('id')) { //if what's in the phyList array matches selection
                    fname = fname + phyList[test].firstName + "<br>";
                    lname = lname + phyList[test].lastName + "<br>";
                    stats = stats + phyList[test].status + "<br>";
                    spec = spec + phyList[test].specialty + "<br>";
                    addr = addr + phyList[test].address + "<br>";
                    phonen = phonen + phyList[test].phone + "<br>";

                    document.getElementById('first').innerHTML = fname;
                    document.getElementById('last').innerHTML = lname;
                    document.getElementById('status').innerHTML = stats;
                    document.getElementById('specialty').innerHTML = spec;
                    document.getElementById('address').innerHTML = addr;
                    document.getElementById('phone').innerHTML = phonen;
                    //alert ("ok");
                    document.getElementById('errorst').innerHTML = "";
                }
                else {
                    document.getElementById('errorst').innerHTML = "<i>No match found</i>";
                }
            }
...
for (test=0;test<=phyList.length-1;test++) {
   var i = phyList[test].specialty; //get all specialty in the array
for ( var iVar; iVar < i.length; iVar++ )
{
    if (i[iVar] == $(".dStatus").find('option:selected').attr('id')) { //if what's in the phyList array matches selection
        //code
    }
}
// value of dropdown
var spe = $('#test').val();

var matchedPhy = $.map(phyList, function (v, i) {
    // return object if string matches or string is in array
    return v.specialty == spe || $.inArray(spe,v.specialty) > -1 ? v: null;
});

if(matchedPhy.length){
    // found some results
}else{
    // found no results
}