Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

177
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!