首页 > 解决方案 > jquery对象的每次迭代

问题描述

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

在此处输入图像描述

我可以把它拉到 jQuery 函数中。each我通常在我的语句中使用键值对:

$.each(teamIds, function(innerKey, id) {
      if(id === somevar){ ... etc }
}

使用这个数组集合,我需要捕获team_id以与更高级别的循环进行比较,然后将其存储employee_id在同一循环中(如果为真)。这不适用于键/值对,因为它们将显示 ateam_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正在被迭代,并且我正在正确地执行此操作。这是正确的,还是我会对这个烂摊子有问题?或者......我只是完全错过了一种明显更好的构建方法吗?valuearrayOfTeamAndEmp

标签: jqueryeach

解决方案


我还不完全确定你的脚本的目的是什么。但是,如果您想以一种将employee_ids 保存为团队成员的数组的方式收集和重组数据,则可以执行以下(简化的)单循环版本:

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>


推荐阅读