我在一个循环中有一个凌乱的循环。最内层的循环需要根据对象集合检查id
。集合中的每个对象都有一个employee_id
和一个team_id
:
我可以将其引入jQuery函数中。我通常在each
语句上使用键/值对:
$.each(teamIds, function(innerKey, id) {
if(id === somevar){ ... etc }
}
使用此数组集合,我需要捕获team_id
以便与更高级别的循环进行比较,然后如果为true,则将employee_id
存储在同一循环中。这不适用于键/值对,因为它们将在下一个循环中显示team_id
及其id
,然后显示employee_id
。因此,我在最终循环中使用了该对象,并且假定正在对其进行迭代。
以下完美地起作用:
$.each(empListTeam, function(key, arrayOfTeamAndEmp) {
$.each(teamIds, function(innerKey, id) {
$.each(arrayOfTeamAndEmp, function(key2, value) {
if (key2 === 'team_id' && parseInt(id) === value) {
appliedEmpIds.push(arrayOfTeamAndEmp.employee_id);
}
});
})
});
我找不到正确的文档来说明即使我通过最后一个循环传递key2
,value
,也正在迭代arrayOfTeamAndEmp
,并且我做得正确。这是正确的吗,还是我会遇到麻烦呢?还是...我只是完全错过了一种更好的构造方法?
我尚不确定脚本的目的是什么。但是,如果您要通过某种方式收集和重新组织数据,使数组中包含有employee_id的团队成员,则可以执行以下(简化的)单循环版本:
var appliedEmpIds={};
var coll={items:[
{team_id:1,employee_id:2},
{team_id:1,employee_id:3},
{team_id:2,employee_id:4},
{team_id:2,employee_id:5},
{team_id:2,employee_id:6},
{team_id:3,employee_id:7}
]};
$.each(coll.items,function(i,o){
(appliedEmpIds[o.team_id]=appliedEmpIds[o.team_id] || []).push(o.employee_id);
});
console.log('jQuery:',appliedEmpIds);
// you can do the same also in Vanilla JS as
var aei={};
coll.items.forEach(function(o,i){
(aei[o.team_id]=aei[o.team_id] || []).push(o.employee_id);
});
console.log('Vanilla:',aei);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>