Realizo dos llamadas api y necesito comparar los resultados y crear una nueva matriz que contenga solo los valores de la segunda llamada que no son iguales a la primera
const listaRealmTrovata = async () => { await axios.get(APICALL1) .then((realmUserAttivi) => { axios.get(APICALL2) .then((realmAttivi) => { realmUserAttivi.data.map((realmUserAttivo) => { realmAttivi.data.filter((res) => { if (realmUserAttivo.realm.id !== res.id) { setListaRealm(previousListRealm => [...previousListRealm, { value: res.id, label: res.realmId }]); } }) }) }) }) };De esta forma obtengo una lista con valores repetidos, porque comparo cada elemento del primer arreglo cada vez con los elementos del segundo arreglo
Ejemplo:
realmUserAttivi.data : [ 0: {id:1} 1: {id:2} 3: {id:3} ] realmAttivi.data : [ 0: {id:1} 1: {id:5} 3: {id:3} ]por lo que el resultado que me gustaría obtener es:
listaRealm: [0: {id:5}] // the only one that isn't in equal in the two array.
Aquí, la variable notPresent contendrá datos de realmAttivi que no se encuentran en realmUserAttivo.
//api call code .then((realmAttivi) => { const notPresent = realmAttivi.filter(ra => !realmUserAttivo.some(rua => rua.id === ra.id)); setListaRealm(previousListRealm => [...previousListRealm, ...notPresent]); }) realmUserAttivi = [ {id:1}, {id:2}, {id:3}, ] realmAttivi = [ {id:1}, {id:5}, {id:3} ] const notRepeated = (arr1, arr2) => arr2.filter(objArr2 => !arr1.find(objArr1 => objArr2.id == objArr1.id)) notRepeated(realmUserAttivi,realmAttivi)esto devolverá [{id:5}]
Pensé que si la matriz se vuelve enorme, ya que el algoritmo que se usa es n ^ 2, podría congelar la página, ya que JS estaría ocupado, intenté hacerlo asíncrono.
let realmUserAttivi = [ {id:1}, {id:2}, {id:3}, ], realmAttivi = [ {id:1}, {id:5}, {id:3} ] async function findCommon() { let promises = [] for (let i = 0; i < realmAttivi.length; i++) { promises.push(SetTimoutPromise(i)) } let res = await Promise.all(promises) res = res.filter(e => e) return res } let SetTimoutPromise =(index)=> new Promise((resolve, reject) => { setTimeout(() => { if (!realmAttivi.find((objArr1 => realmUserAttivi[index].id == objArr1.id))) { resolve(realmAttivi[index]) } resolve() },0) }) findCommon()