jQuery对象的每次迭代

问题描述 投票:0回答:1

我在一个循环中有一个凌乱的循环。最内层的循环需要根据对象集合检查id。集合中的每个对象都有一个employee_id和一个team_id

enter image description here

我可以将其引入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);
              }
           });
     })
});

我找不到正确的文档来说明即使我通过最后一个循环传递key2value,也正在迭代arrayOfTeamAndEmp,并且我做得正确。这是正确的吗,还是我会遇到麻烦呢?还是...我只是完全错过了一种更好的构造方法?

jquery each
1个回答
0
投票

我尚不确定脚本的目的是什么。但是,如果您要通过某种方式收集和重新组织数据,使数组中包含有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>
© www.soinside.com 2019 - 2024. All rights reserved.