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

178
Visualizações
¿Cómo eliminar objetos duplicados en una matriz y el valor original basado en 2 propiedades?

Cómo eliminar objetos duplicados en una matriz y el valor original basado en 2 propiedades

Esto es lo que hago, pero esto devuelve el original.

 const rooms = [ { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 189 }, { room_rate_type_id: 190, price: 200 } ]; let result = rooms.filter((e, i) => { return rooms.findIndex((x) => { return x.room_rate_type_id == e.room_rate_type_id && x.price == e.price;}) == i; }); console.log(result);

quiero que el resultado sea solo

 { room_rate_type_id: 202, price: 189 }, { room_rate_type_id: 190, price: 200 }
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Supongo que desea encontrar el precio más barato para cada room_rate_type_id, podemos hacerlo usando Array.reduce() .

Obtenemos el precio más barato para cada ID de tipo de tarifa al recorrer cada entrada y reemplazar el valor de cada ID de tarifa si el precio de entrada es más bajo que el valor más bajo actual:

 const rooms = [ { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 189 }, { room_rate_type_id: 190, price: 200 } ]; const result = Object.values(rooms.reduce((acc, cur) => { if (!acc[cur.room_rate_type_id] || acc[cur.room_rate_type_id].price > cur.price) acc[cur.room_rate_type_id] = cur; return acc; }, {})); console.log('Result:', result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório

0

Me gustaría crear una matriz de result y usar rooms.forEach(...) en lugar de rooms.filter(...) para iterar a través de los elementos en las rooms y en cada iteración podemos verificar si hay un objeto con el mismo room_rate_type_id y valores de propiedad de price . Para verificar la existencia del objeto en la matriz de result , estoy usando result.findIndex(...) . Si este método devuelve un valor 0 o mayor que 0, eso significa que ya tenemos un elemento con estos valores y no es necesario agregarlo a la matriz de result ; de lo contrario, el result no contiene un objeto similar y debemos agregarlo. Aquí está el ejemplo de cómo lo hago:

 const rooms = [ { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 189 }, { room_rate_type_id: 190, price: 200 } ]; const result = []; rooms.forEach(item => { if (result.findIndex(x => x.room_rate_id === item.room_rate_id && x.price === item.price) < 0) { result.push(item); } }); console.log(result)

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede tomar un Map y filtrar los valores.

 const getKey = o => ['room_rate_type_id', 'price'].map(k => o[k]).join('|'), rooms = [{ room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 200 }, { room_rate_type_id: 202, price: 189 }, { room_rate_type_id: 190, price: 200 }], result = [ ...rooms .reduce( (m, o) => (k => m.set(k, !m.has(k) && o))(getKey(o)), new Map ) .values() ] .filter(Boolean); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

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