1
resposta

Map encadeado

Fala galera, boa tarde.

Estou na duvida de como fazer um for encadeado.

const arrayRoles = [{"label":"SALE_MAP","value":"0SALE_MAP","checked":true},{"label":"USER","value":"1USER","checked":true},{"label":"HIERARCHY","value":"2HIERARCHY","checked":true},{"label":"REGION","value":"3REGION","checked":true},{"label":"DISTRICT","value":"4DISTRICT","checked":true},{"label":"STORE","value":"5STORE","checked":true},{"label":"ACOMPANHAMENTO_PORTOCRED","value":"6ACOMPANHAMENTO_PORTOCRED","checked":true},{"label":"ACOMPANHAMENTO_CLARO","value":"7ACOMPANHAMENTO_CLARO","checked":true},{"label":"ACOMPANHAMENTO_TIM","value":"8ACOMPANHAMENTO_TIM","checked":true},{"label":"AUTOMATIC_NOTIFICATION","value":"9AUTOMATIC_NOTIFICATION","checked":true},{"label":"ACOMPANHAMENTO_CETELEM","value":"10ACOMPANHAMENTO_CETELEM","checked":true},{"label":"ACOMPANHAMENTO_ITURAN","value":"11ACOMPANHAMENTO_ITURAN","checked":true},{"label":"ACOMPANHAMENTO_TRADEIN","value":"12ACOMPANHAMENTO_TRADEIN","checked":true},{"label":"ACOMPANHAMENTO_CARTAO_CREDITO","value":"13ACOMPANHAMENTO_CARTAO_CREDITO","checked":true},{"label":"SEARCH","value":"14SEARCH","checked":true},{"label":"REPORT_SERVICE_SOLD","value":"15REPORT_SERVICE_SOLD","checked":true},{"label":"REPORT_TRANSACTION","value":"16REPORT_TRANSACTION","checked":true},{"label":"ADMIN_MOBILE_INSURANCE","value":"17ADMIN_MOBILE_INSURANCE","checked":true},{"label":"PHONE_PLAN","value":"18PHONE_PLAN","checked":true},{"label":"ACOMPANHAMENTO_PHONE_PLAN","value":"19ACOMPANHAMENTO_PHONE_PLAN","checked":true},{"label":"ACOMPANHAMENTO_BLACKHAWK","value":"20ACOMPANHAMENTO_BLACKHAWK","checked":true},{"label":"ACOMPANHAMENTO_ALLIED","value":"21ACOMPANHAMENTO_ALLIED","checked":true},{"label":"ACOMPANHAMENTO_MOBILE_INSURANCE","value":"22ACOMPANHAMENTO_MOBILE_INSURANCE","checked":true},{"label":"ACOMPANHAMENTO_DENTAL_INSURANCE","value":"23ACOMPANHAMENTO_DENTAL_INSURANCE","checked":true},{"label":"ACOMPANHAMENTO_NOTEBOOK_INSURANCE","value":"24ACOMPANHAMENTO_NOTEBOOK_INSURANCE","checked":true},{"label":"ACOMPANHAMENTO_FGTS_LOAN","value":"25ACOMPANHAMENTO_FGTS_LOAN","checked":true}]

const arrayFiltered = [{"label":"ACOMPANHAMENTO_PORTOCRED","value":"6ACOMPANHAMENTO_PORTOCRED","checked":true},{"label":"ACOMPANHAMENTO_CLARO","value":"7ACOMPANHAMENTO_CLARO","checked":true},{"label":"ACOMPANHAMENTO_TIM","value":"8ACOMPANHAMENTO_TIM","checked":false},{"label":"ACOMPANHAMENTO_CETELEM","value":"10ACOMPANHAMENTO_CETELEM","checked":false},{"label":"ACOMPANHAMENTO_ITURAN","value":"11ACOMPANHAMENTO_ITURAN","checked":false},{"label":"ACOMPANHAMENTO_TRADEIN","value":"12ACOMPANHAMENTO_TRADEIN","checked":false},{"label":"ACOMPANHAMENTO_CARTAO_CREDITO","value":"13ACOMPANHAMENTO_CARTAO_CREDITO","checked":false},{"label":"ACOMPANHAMENTO_PHONE_PLAN","value":"19ACOMPANHAMENTO_PHONE_PLAN","checked":false},{"label":"ACOMPANHAMENTO_BLACKHAWK","value":"20ACOMPANHAMENTO_BLACKHAWK","checked":false},{"label":"ACOMPANHAMENTO_ALLIED","value":"21ACOMPANHAMENTO_ALLIED","checked":false},{"label":"ACOMPANHAMENTO_MOBILE_INSURANCE","value":"22ACOMPANHAMENTO_MOBILE_INSURANCE","checked":false},{"label":"ACOMPANHAMENTO_DENTAL_INSURANCE","value":"23ACOMPANHAMENTO_DENTAL_INSURANCE","checked":false},{"label":"ACOMPANHAMENTO_NOTEBOOK_INSURANCE","value":"24ACOMPANHAMENTO_NOTEBOOK_INSURANCE","checked":false},{"label":"ACOMPANHAMENTO_FGTS_LOAN","value":"25ACOMPANHAMENTO_FGTS_LOAN","checked":false}]

let arrayRolesFilteredCheckAll = [];


arrayRolesFilteredCheckAll = arrayRoles.map(itemOriginal => {
  return arrayFiltered.map(itemFiltered => {
    if(itemOriginal.label === itemFiltered.label) {
      return {...itemOriginal, checked: true}
    }
    return {...itemOriginal}
  })
});

console.log(arrayRolesFilteredCheckAll)

Tentei fazer desse jeito, mas ele me retorna tudo varias vezes o mesmo cara

1 resposta

E aí, Kaique! Beleza?

Olha só, o que tá acontecendo é que o teu código tá fazendo um "for encadeado" meio demais. O método map já percorre o array, então tu tá meio que fazendo um loop dentro de outro loop, e isso tá gerando o array meio doido.

Dá uma olhada nessa alternativa mais tranquila usando só um loop:

let arrayRolesFilteredCheckAll = arrayRoles.map(itemOriginal => {
  const foundItem = arrayFiltered.find(itemFiltered => itemOriginal.label === itemFiltered.label);

  return foundItem ? {...itemOriginal, checked: foundItem.checked} : {...itemOriginal};
});

console.log(arrayRolesFilteredCheckAll);

Essa ideia é usar o find pra buscar o item correspondente no arrayFiltered. Se encontrar, a gente atualiza o checked. Se não, mantemos o original.

Testa aí e me fala se resolveu!