Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

136
Visualizações
obtener objetos únicos de una matriz de objetos anidados y subpropiedades

tengo una secuencia de comandos en la que intento obtener el objeto único según el estado de la matriz de objetos

Los siguientes scripts funcionan bien, pero tengo un caso en el que he anidado un objeto en un tipo de estado que tiene un subestado, por lo que quiero encontrar el único de la matriz de objetos y obtener el único.

El siguiente fragmento puedo obtener el primer nivel, pero si vemos el estado => "EF" tiene un sub_estado_detalles, entonces necesito obtener el único de sub_estado_detalles si el estado es EF

 let inputArray = [{ state: "AB", }, { state: "BC", }, { state: "BC", }, { state: "CD", }, { state: "CD", }, { state: "DE", }, { state: "EF", sub_state_details: { state: "EF-1" } }, { state: "EF", sub_state_details: { state: "EF-1" } }, { state: "EF", sub_state_details: { state: "EF-2" } } ] let resArr = [] inputArray.filter(function(item) { var i = resArr.findIndex(x => (x.state == item.state)); if (i <= -1) { resArr.push({ state: item.state }); } return null; }); console.log(resArr)

Rendimiento esperado

 let output = [{ state: "AB", }, { state: "BC", }, { state: "CD", }, { state: "DE", }, { state: "EF-1", },{ state: "EF-2", }]
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Otras respuestas pueden darle el resultado correcto, pero están usando funciones de matriz incorrectamente, dado que se basan en su intento. por ejemplo, algunos usan el filter pero nunca usan el resultado del filter . o tratando de return null de forEach aunque forEach no lo haga. devolver cualquier cosa

reduce() se adapta mejor a su caso, ya que está reduciendo una matriz a otra, según algunas condiciones:

 let inputArray = [{ state: "AB", }, { state: "BC", }, { state: "BC", }, { state: "CD", }, { state: "CD", }, { state: "DE", }, { state: "EF", sub_state_details: { state: "EF-1" } }, { state: "EF", sub_state_details: { state: "EF-1" } }, { state: "EF", sub_state_details: { state: "EF-2" } } ] const result = inputArray.reduce((acc, cur) => { if(!acc.find((accItem) => accItem.state == cur.state)) { if(cur.state === 'EF') { if(cur.sub_state_details && !acc.find((accItem) => accItem.state === cur.sub_state_details.state)) { acc.push({state: cur.sub_state_details.state}) } } else { acc.push({state: cur.state}) } } return acc; }, []) console.log(result)

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede usar una declaración condicional para verificar si existe sub_state_details .

Como esto:

 let inputArray = [ { state: "AB", }, { state: "BC", }, { state: "BC", }, { state: "CD", }, { state: "CD", }, { state: "DE", }, { state: "EF", sub_state_details: { state: "EF-1", }, }, { state: "EF", sub_state_details: { state: "EF-1", }, }, { state: "EF", sub_state_details: { state: "EF-2", }, }, ]; let resArr = []; inputArray.filter(function (item) { var i = resArr.findIndex((x) => x.state == item.state); if (i <= -1) { if (item.sub_state_details) { resArr.push({ state: item.sub_state_details.state, }); } else { resArr.push({ state: item.state, }); } } return null; }); console.log(resArr);

about 4 years ago · Juan Pablo Isaza Relatório

0

Esta es en realidad una solución bastante simple. Primero debe verificar si sub_state_details existe. Si es así, necesitamos usar ese state en su lugar. Podemos lograr esto usando una variable llamada "sub", y si el objeto sub_state_details está definido, usamos sub_state_details.state en lugar de item.state .

 let inputArray = [{ state: "AB", }, { state: "BC", }, { state: "BC", }, { state: "CD", }, { state: "CD", }, { state: "DE", }, { state: "EF", sub_state_details: { state: "EF-1" } }, { state: "EF", sub_state_details: { state: "EF-1" } }, { state: "EF", sub_state_details: { state: "EF-2" } } ] let resArr = [] inputArray.filter(function(item) { var i = resArr.findIndex(x => (x.state == item.state)); let sub = item.sub_state_details; if(!sub) {sub=item} if (i <= -1) { resArr.push({ state: sub.state }); } return null; }); console.log(resArr)

Espero poder ayudar.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda