Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按键值查找嵌套数组?_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 如何按键值查找嵌套数组?

Javascript 如何按键值查找嵌套数组?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个JS作业数组,我想根据用户点击的作业将数据输入把手模板 var data = { jobs: [ {jobName:"ACME", jobRole: "Vice President", jobDesc: "..."}, {jobName:"Square Co", jobRole: "Director", jobDesc: "..."}, {jobName:"Compu Mega Net", jobRole: "Manager", jobDesc: "..."} ]};

我有一个JS作业数组,我想根据用户点击的作业将数据输入把手模板

var data = { jobs: [
   {jobName:"ACME", jobRole: "Vice President", jobDesc: "..."},
   {jobName:"Square Co", jobRole: "Director", jobDesc: "..."},
   {jobName:"Compu Mega Net", jobRole: "Manager", jobDesc: "..."}
]};
我有一组元素,每个元素都有一个与要显示的jobName匹配的数据属性

<a href="#" class="job" data-jobName="ACME">
<a href="#" class="job" data-jobName="Square Co">
<a href="#" class="job" data-jobName="Compu Mega Net">
问题是:如何在数组中查找与用户选择的jobName匹配的适当对象


我尝试使用$.inarayacme,数据;和$.inarayacme,data.jobs;但我总是返回-1未找到。

这将生成一个数组:

function ObjectSelected(jobName_selected) { 
    var  appropriate_object = null; 

    var data = { jobs: [
       {jobName:"ACME", jobRole: "Vice President", jobDesc: "..."},
       {jobName:"Square Co", jobRole: "Director", jobDesc: "..."},
       {jobName:"Compu Mega Net", jobRole: "Manager", jobDesc: "..."}
    ]};

    for(var i = 0;i < data.length;i++)
        if(data[i].jobName = jobName_selected)
            appropriate_object = data[i];
}
var matchingJobs = data.jobs.filter(function(job){ return job.jobName == "ACME" });
您可以这样从中提取最后一个匹配的作业:

var firstMatch = matchingJobs.pop();
jQuery有一个可以进行搜索的。例如,如果您知道目标对象将始终存在,则可以执行以下操作:

$('a').click(function(){
    var search = $(this).data('jobname');
    var result = $.grep(data.jobs, function(obj){ return obj.jobName == search; })[0];
    console.log(result); // the target object
});
如果不确定对象是否存在,则需要检查返回值,而不是直接访问第一个元素:

$('a').click(function(){
    var search = $(this).data('jobname');
    var resultArray = $.grep(data.jobs, function(obj){ return obj.jobName == search; });

    if(resultArray.length > 0){
        console.log( resultArray[0] ); // the target object
    } 
});

$.inArray不适用于对象,因此命名为inArray谢谢,@joeytwidle。我很好奇,当你写data.jobs.filterfunctionjob时{return job.jobName…,job参数是什么?我注意到@MrCode有一个类似的函数,它使用obj作为同一个参数。只是试图理解解决方案。我们给筛选函数提供了一个匿名函数。筛选函数为列表中的每个项调用我们的函数一次,并将该项作为第一个参数传递。我们的函数接收该项,命名第一个参数作业,然后返回true或false以指示筛选器是否应保留该项。我们同样可以为该参数选择其他名称,例如obj.Excellent。非常感谢您的澄清!