Tenía una lista de matrices duplicadas de String y una matriz de objetos. Quiero encontrar la propiedad en un objeto particular de la matriz de forma única sin duplicación del objeto de la matriz. Si se puede hacer en la biblioteca lodash, sería increíble.
const arr1 = ['test@email', 'test2@email'] const arr2 = [{ id: 1, email: 'test@email' }]Resultado Esperado
['test2@email'] esto es lo que he hecho hasta ahora Al convertir arr1 en object first para poder compararlo con arr2
const emailLists = _.map(arr, function (item) { console.log(item) return { email: item } }) luego fusionarlos y usar uniq para eliminar duplicados
const merge = _.unionBy(array1, array2, 'email') const result _.uniq(merge, 'email');Creo que todavía no es un buen proceso y no está limpio.
Puedes hacerlo sin lodash
const arr1 = ['test@email', 'test2@email'] const arr2 = [{ id: 1, email: 'test@email' }] const emailToDelete = arr2.map(a => a.email) const result = arr1.filter(e => !emailToDelete.includes(e)) console.log(result)Puedes usar la cadena lodash para resolver eso:
const result = _([...arr1, ...arr2.map(i => i.email)]) // ['test@email', 'test2@email', 'test@email'] .countBy() // { test@email: 2, test2@email: 1 } .pickBy(count => count === 1) // { test2@email: 1 } .keys() // ['test2@email'] .value();Puede usar el filter en la primera matriz y verificar que una dirección de correo electrónico coincida con some de sus objetos en la segunda matriz. Entonces, incluso si coincide con varios objetos, el correo electrónico coincidente solo estará en la salida una vez.
Quiero encontrar la propiedad en un objeto particular de la matriz de forma única sin duplicación del objeto de la matriz
Entonces, su salida esperada es incorrecta, ya que proporciona un correo electrónico que no se encuentra en la matriz de objetos. Supongo que fue un error tipográfico en tu pregunta.
const arr1 = ['test@email', 'test2@email'] const arr2 = [{ id: 1, email: 'test@email' }] const result = arr1.filter(search => arr2.some(({email}) => email == search)); console.log(result);