Фильтровать карту и уменьшить - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть следующая строка кода:

          $scope.listDeColaboradoresObject.forEach(item => {
            item.listNmAssunto = $scope.relatorioTotalMensagensRespondidasColab
              .filter(x => x.nmUsuario == item.nmUsuario)
              .map(x => x.nmAssunto);
            item.listNmAssunto = $scope.removeDuplicates(item.listNmAssunto);

            item.listDtResposta = $scope.relatorioTotalMensagensRespondidasColab
              .filter(x => x.nmUsuario == item.nmUsuario)
              .map(x => x.dtResposta);

          });

, который проходит через этот массив:

0: {deTipoAtendimento: "012", nmAssunto: "Cartão extraviado", nmUsuario: "15", dtResposta: "2018", total: 1}
1: {deTipoAtendimento: "012", nmAssunto: "Assunto Novo 012", nmUsuario: "Admin", dtResposta: "2018", total: 2}
2: {deTipoAtendimento: "012", nmAssunto: "Assunto Novo 012", nmUsuario: "Administrador", dtResposta: "2018", total: 1}
3: {deTipoAtendimento: "012", nmAssunto: "Assunto Novo 012", nmUsuario: "Administrador IMB", dtResposta: "2018", total: 3}
4: {deTipoAtendimento: "012", nmAssunto: "Assunto Teste GREAt", nmUsuario: "Administrador IMB", dtResposta: "2018", total: 2}
5: {deTipoAtendimento: "012", nmAssunto: "Thais 23042018", nmUsuario: "Administrador IMB", dtResposta: "2018", total: 2}
6: {deTipoAtendimento: "012", nmAssunto: "teste Alterado2", nmUsuario: "Administrador IMB", dtResposta: "2018", total: 1}

, и это возвращает мне следующий массив:

0: {nmUsuario: "15", listNmAssunto: Array(1), listDtResposta: Array(1), $$hashKey: "object:2975"}
1: {nmUsuario: "Admin", listNmAssunto: Array(1), listDtResposta: Array(1), $$hashKey: "object:2976"}
2: {nmUsuario: "Administrador", listNmAssunto: Array(1), listDtResposta: Array(1), $$hashKey: "object:2977"}
3: {nmUsuario: "Administrador IMB", listNmAssunto: Array(4), listDtResposta: Array(4), $$hashKey: "object:2978"}

Мой вопрос: как мне во время карты вставить и nmSubject, и dtResponse в один и тот же массив

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Почему вы не отображаете в один объект?Как это:

          $scope.listDeColaboradoresObject.forEach(item => {
        item.listAssunto = $scope.relatorioTotalMensagensRespondidasColab
          .filter(x => x.nmUsuario == item.nmUsuario)
          .map(x => {a:x.nmAssunto,b: x.dtResposta});
        item.listNmAssunto = $scope.removeDuplicates(item.listAssunto);

      });
0 голосов
/ 19 февраля 2019

В соответствии с вашим комментарием к результатам, похоже, что вы хотите сгруппировать свой список по nmUsuario, но создать единый массив объектов, которые содержат соответствующие nmAssunto и dtResposta.Вы можете достичь этого с reduce().По сути, вы создаете объект с пустым массивом для каждой nmAssunto и помещаете новый объект в правильный массив каждую итерацию.Затем используйте Object.values() для преобразования в окончательный выходной массив.

const data = [
  {deTipoAtendimento:"012",nmAssunto:"Cartão extraviado",nmUsuario:"15",dtResposta:"2018",total:1},
  {deTipoAtendimento:"012",nmAssunto:"Assunto Novo 012",nmUsuario:"Admin",dtResposta:"2018",total:2},
  {deTipoAtendimento:"012",nmAssunto:"Assunto Novo 012",nmUsuario:"Administrador",dtResposta:"2018",total:1},{deTipoAtendimento:"012",nmAssunto:"Assunto Novo 012",nmUsuario:"Administrador IMB",dtResposta:"2018",total:3},
  {deTipoAtendimento:"012",nmAssunto:"Assunto Teste GREAt",nmUsuario:"Administrador IMB",dtResposta:"2018",total:2},
  {deTipoAtendimento:"012",nmAssunto:"Thais 23042018",nmUsuario:"Administrador IMB",dtResposta:"2018",total:2},
  {deTipoAtendimento:"012",nmAssunto:"teste Alterado2",nmUsuario:"Administrador IMB",dtResposta:"2018",total:1}
]

const groups = data.reduce((r, { nmUsuario, nmAssunto, dtResposta }) => {
  r[nmUsuario] = r[nmUsuario] || {
    nmUsuario,
    listAssunto: []
  }
  r[nmUsuario].listAssunto.push({
    a: nmAssunto,
    b: dtResposta
  })
  return r
}, {})
 
console.log(Object.values(groups))
0 голосов
/ 19 февраля 2019

Код, который вы просто обновите существующий массив.Я не уверен, как это создает вывод, который вы опубликовали.Но, глядя на ваш вывод, я предполагаю, что вы хотите сгруппировать на основе nmUsuario и создать массив объектов с двумя свойствами массива.Вы можете сделать следующее, используя reduce, уничтожение и Object.values

const input = [{deTipoAtendimento:"012",nmAssunto:"Cartão extraviado",nmUsuario:"15",dtResposta:"2018",total:1},{deTipoAtendimento:"012",nmAssunto:"Assunto Novo 012",nmUsuario:"Admin",dtResposta:"2018",total:2},{deTipoAtendimento:"012",nmAssunto:"Assunto Novo 012",nmUsuario:"Administrador",dtResposta:"2018",total:1},{deTipoAtendimento:"012",nmAssunto:"Assunto Novo 012",nmUsuario:"Administrador IMB",dtResposta:"2018",total:3},{deTipoAtendimento:"012",nmAssunto:"Assunto Teste GREAt",nmUsuario:"Administrador IMB",dtResposta:"2018",total:2},{deTipoAtendimento:"012",nmAssunto:"Thais 23042018",nmUsuario:"Administrador IMB",dtResposta:"2018",total:2},{deTipoAtendimento:"012",nmAssunto:"teste Alterado2",nmUsuario:"Administrador IMB",dtResposta:"2018",total:1}]

const merged = input.reduce((r,{ nmUsuario, nmAssunto, dtResposta }) => {
  r[nmUsuario] = r[nmUsuario] || {nmUsuario, listNmAssunto: [], listDtResposta:[]};
  r[nmUsuario].listNmAssunto.push(nmAssunto);
  r[nmUsuario].listDtResposta.push(dtResposta);
  return r;
},{})

const output = Object.values(merged);
console.log(output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...