Javascript 如何按键值查找嵌套数组?
我有一个JS作业数组,我想根据用户点击的作业将数据输入把手模板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: "..."} ]};
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。非常感谢您的澄清!