Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

184
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda