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

115
Views
averiguar si el objeto en dos matrices de objetos es único

Compare dos matrices de objetos para encontrar valores distintos por todos los valores clave

Así que encontré mucha documentación como Obtener valores únicos comparando objetos de matriz antiguos y nuevos, pero mi caso es un poco más complejo.

En mi caso quiero comparar dos bases de datos de precios, cada semana, averiguar qué precios han cambiado y luego agregarlos solo a la base de datos existente. Te doy un ejemplo:

 oldPrices = [{"date": "07-07-2022", "price": 129, "locationId": 1 }, {"date": "08-07-2022", "price": 139, "locationId": 1 }, {"date": "08-07-2022", "price": 139, "locationId": 2 }]
 newPrices = [{"date": "07-07-2022", "price": 139, "locationId": 1 }, {"date": "08-07-2022", "price": 139, "locationId": 1 }, {"date": "08-07-2022", "price": 139, "locationId": 2 }]

Salida esperada para agregar a oldPrices:

 [{"date": "07-07-2022", "price": 139, "locationId": 1 }]

Lo que he probado hasta ahora:

 var data1 = {{(table17.data)}}; var data2 = {{ formatDataAsArray(table18.data) }}; const oldPrices = data1.map (({date, price, locationId}) => ({date, price, locationId})); const newPrices = data2.map (({date, price, locationId}) => ({date, price, locationId})); function getDifference(array1, array2) { return array1.filter(object1 => { return !array2.some(object2 => { return object1.price === object2.price; }); }); } const difference = [ ...getDifference(oldPrices, newPrices), ...getDifference(newPrices, oldPrices) ]; console.log(difference)

Resultado = vacío

Solo hay resultado, si los datos de newPrice contienen precios que no se incluyeron en los datos de oldPrices. Esto no tiene sentido, ya que quiero agregar todos los objetos que contienen combinaciones de las 3 claves, que son nuevas (únicas) .

Lo que necesito es que la función no solo verifique el precio de cada objeto, sino también la combinación de fecha, precio y ID de ubicación, de modo que la salida en este caso sea nuevamente [{"fecha": "07-07-2022", " precio": 139, "ubicaciónId": 1 }].

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

estoy usando lenguaje js

1- Use el método filter() para iterar sobre la primera matriz. 2- Verifique si cada objeto no está contenido en la segunda matriz.

3- Repita los pasos 1 y 2 para la segunda matriz. 4- Concatenar los resultados para obtener la diferencia completa.

about 4 years ago · Juan Pablo Isaza Report

0

No entiendo completamente qué debe contener la matriz de difference . Si desea comparar la matriz newPrices con la matriz oldPrices y devolver solo el objeto que tiene un precio diferente en comparación con su objeto correspondiente (uno con la misma date y locationId ), entonces la siguiente función hará el trabajo:

 const oldPrices = [{"date": "07-07-2022", "price": 129, "locationId": 1 }, {"date": "08-07-2022", "price": 139, "locationId": 1 }, {"date": "08-07-2022", "price": 139, "locationId": 2 }]; const newPrices = [{"date": "07-07-2022", "price": 139, "locationId": 1 }, {"date": "08-07-2022", "price": 139, "locationId": 1 }, {"date": "08-07-2022", "price": 139, "locationId": 2 }]; function getDifference(array1, array2) { return array1.filter(object1 => { return array2.find(object2 => { if (object1.date === object2.date && object1.locationId === object2.locationId && object1.price !== object2.price) { return object2 } }) }); } const difference = [ // ...getDifference(oldPrices, newPrices), ...getDifference(newPrices, oldPrices) ]; console.log(difference)

Tenga en cuenta que si ejecuta la función getDifference con oldPrices como primer argumento y newPrices como segundo argumento, el resultado no será el mismo.

Espero que esto sea lo que está tratando de lograr, si no es así, explique con más detalle cuál debería ser el resultado y cómo le gustaría lograrlo.

about 4 years ago · Juan Pablo Isaza Report

0

Creo que esta es una buena solución para su problema.

 const oldPrices = [ { date: "07-07-2022", price: 129, locationId: 1 }, { date: "08-07-2022", price: 139, locationId: 1 }, { date: "08-07-2022", price: 139, locationId: 2 }, ]; const newPrices = [ { date: "07-07-2022", price: 139, locationId: 1 }, { date: "08-07-2022", price: 139, locationId: 1 }, { date: "08-07-2022", price: 139, locationId: 2 }, ]; let old = oldPrices.map((p) => JSON.stringify(p)); let unique = newPrices.filter((p) => !old.includes(JSON.stringify(p))); console.log(unique);

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!