Jquery каждой итерации объекта - PullRequest
0 голосов
/ 10 ноября 2019

У меня грязный цикл внутри цикла. Внутренний цикл должен проверять id в отношении коллекции объектов. У каждого объекта в коллекции есть employee_id и team_id:

enter image description here

Я могу перенести это в функцию jQuery. Я обычно использую пару ключ-значение в моих each выражениях:

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

В этой коллекции массивов мне нужно перехватить team_id для сравнения с циклом более высокого уровня, а затем сохранить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 повторяется, и я делаю это правильно. Это правильно, или у меня будут проблемы с этим беспорядком? Или ... я просто упускаю явно лучший способ построить это?

1 Ответ

2 голосов
/ 10 ноября 2019

Я еще не совсем уверен, какова цель вашего сценария. Но если вы хотите собирать и реорганизовывать свои данные таким образом, чтобы у вас были массивы, содержащие 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>
...