Tengo 2 matrices como a continuación:
const array1 = [{name: "1"}, {name: "2"}, {name: "3"}, {name: "4"}, {name: "4"}]; const array2 = [{name: "1"}, {name: "5"}, {name: "3"}, {name: "4"}, {name: "4"}, {name: "4"}, {name: "1"}, {name: "1"}, {name: "2"}];La salida esperada es:
[{name: "1"}, {name: "2"}, {name: "3"}, {name: "4"}, {name: "4"}, {name: "5"}, {name: "4"}, {name: "1"}, {name: "1"}];La matriz de resultados debe contener todos los elementos de la matriz 1 y los elementos de la matriz 2 que aún no están presentes en la matriz 1.
Intenté usar _.unionBy
_.unionBy(array1, array2, 'name')pero solo da como resultado una matriz con uniq 'name'
¿Cómo podemos lograr eso usando lodash?
Puedes usar unionBy (lodash)
let result = _.unionBy(array1 , array2, 'name');unionBy - https://docs-lodash.com/v4/union-by/
Suponiendo que no desea { name: "2" } como último elemento del conjunto de resultados, puede contar los elementos agrupados y agregar los elementos deseados.
const array1 = [{ name: "1" }, { name: "2" }, { name: "3" }, { name: "4" }, { name: "4" }], array2 = [{ name: "1" }, { name: "5" }, { name: "3" }, { name: "4" }, { name: "4"}, { name: "4" }, { name: "1" }, { name: "1" }, { name: "2" }], counts = {}, result = array1.map(o => (counts[o.name] = (counts[o.name] || 0) + 1, o)); result.push(...array2.filter(o => !counts[o.name] || !counts[o.name]--)); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }