2017-03-30 65 views
0

在我的应用程序中,我试图返回在所有项目中工作的员工的JavaScript对象。我的数据阵列如下:从数组对象中检索数据

var data = [ 
{ 
    projectName: "project1", projectId: 1, 
    employees: [ 
     {fullName: "John Doe", employeeId: 1}, 
     {fullName: "Jane Smith", employeeId: 2} 
    ] 
}, 

{ 
    projectName: "project2", projectId: 2, 
    employees: [ 
     {fullName: "John Doe", employeeId: 1}, 
     {fullName: "Mary Jones", employeeId: 3}, 
     {fullName: "Bill Evans", employeeId: 4} 
    ] 
} 

];

我需要搜索employeeid 1并返回两个项目。我如何搜索它。

回答

0

尝试使用Array.filterArray.findIndex

UPD: 因为Array.findIndex是ES6一个新的功能,也许不被一些浏览器的支持,但它对于那些不支持的浏览器使用填充工具,请参阅文档here)。

function doFilter(arr) { 
    return arr.filter(function(item) { 
    return item.employees.findIndex(function(employee) { 
     return employee.employeeId === 1; 
    }) > -1; 
}); 
} 

这个代码片段将返回目标项目数组,它包含与1

var data = [{ 
 
    projectName: "project1", 
 
    projectId: 1, 
 
    employees: [{ 
 
     fullName: "John Doe", 
 
     employeeId: 1 
 
     }, 
 
     { 
 
     fullName: "Jane Smith", 
 
     employeeId: 2 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    projectName: "project2", 
 
    projectId: 2, 
 
    employees: [{ 
 
     fullName: "John Doe", 
 
     employeeId: 1 
 
     }, 
 
     { 
 
     fullName: "Mary Jones", 
 
     employeeId: 3 
 
     }, 
 
     { 
 
     fullName: "Bill Evans", 
 
     employeeId: 4 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    projectName: "project3", 
 
    projectId: 3, 
 
    employees: [{ 
 
     fullName: "Jane Smith", 
 
     employeeId: 2 
 
    }] 
 
    } 
 
]; 
 

 
function doFilter(arr) { 
 
    return arr.filter(function(item) { 
 
    return item.employees.findIndex(function(employee) { 
 
     return employee.employeeId === 1; 
 
    }) > -1; 
 
    }); 
 
} 
 
console.log(doFilter(data));

0

我希望这是你要找的代码:

for(i=0;i<data.length;i++) 
{ 
    emp=data[i].employees; 
    for(j=0;j<emp.length;j++) 
    { 
     if(emp[j].employeeId==1) 
      console.log('Project of' + emp[j].fullName + 'is = ' + data[i].projectName) 
    } 
} 
+0

我们可以使用映射函数吗?减少代码? –

+0

哦,是的。我完全忘了。数组有一个内置的'filter'函数。 –

0

希望的ID的员工也能正常工作

var data = [{ 
 
    projectName: "project1", 
 
    projectId: 1, 
 
    employees: [{ 
 
     fullName: "John Doe", 
 
     employeeId: 1 
 
     }, 
 
     { 
 
     fullName: "Jane Smith", 
 
     employeeId: 5 
 
     } 
 
    ] 
 
    }, 
 

 
    { 
 
    projectName: "project2", 
 
    projectId: 2, 
 
    employees: [{ 
 
     fullName: "John Doe", 
 
     employeeId: 1 
 
     }, 
 
     { 
 
     fullName: "Mary Jones", 
 
     employeeId: 3 
 
     }, 
 
     { 
 
     fullName: "Bill Evans", 
 
     employeeId: 4 
 
     } 
 
    ] 
 
    } 
 
]; 
 

 
function getEmployeeById(id) { 
 
    var e = $.map(data, function(a) { 
 
    var r = $.grep(a.employees, function(b) { 
 
     return b.employeeId == id; 
 
    }); 
 
    if (r.length) { 
 
     console.log(a.projectName, r[0].fullName) 
 
    } 
 
    }); 
 
} 
 
getEmployeeById(1)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

0

它可以这样简单。只是迭代和比较。 https://jsfiddle.net/

for(i=0;i<data.length;i++) 
{ 
    for(j=0;j<data[i].employees.length;j++) 
    { 
    if (data[i].employees[j].employeeId == 1) 
     console.log(data[i].projectId); 
    } 
}