Ya tengo una tabla poblada con un conjunto de datos de la API. Para la demostración, digamos que ya he agregado 2 filas en la tabla que obtuve de la API. Ahora, edité la segunda fila y también agregué otra fila. Entonces, lo que quiero lograr es obtener una nueva matriz de objetos que tengan la fila que acabo de editar junto con la fila que acabo de agregar.
Las siguientes son las 2 matrices con conjuntos de datos ficticios que tengo.
Primera matriz:
[ { id: '38sj3-23', user: { id: 21323 }, count: { start: 12, end: 24 }, point: 56 }, { id: '38sj3-23', user: { id: 21323 }, count: { start: 8, end: 36 }, point: 49 }, ]Segunda matriz:
[ { id: '38sj3-23', user: { id: 21323 }, count: { start: 12, end: 24 }, point: 56 }, { id: '38sj3-23', user: { id: 21323 }, count: { start: 36, end: 97 }, point: 15 }, { id: null, count: { start: 123, end: 2135 }, point: 323 }, ] Observe que edité los valores de la segunda fila en Second Array . La tercera fila en la segunda matriz no tiene identificación de usuario porque la identificación de userId se devolverá del servidor después de publicarla
Rendimiento esperado:
[ { id: '38sj3-23', user: { id: 21323 }, count: { start: 36, end: 97 }, point: 15 }, { id: null, count: { start: 123, end: 2135 }, point: 323 }, ] lodash _.differencWith / _.intersectWith pero la salida usando eso fue así a continuación
[ { id: null, count: { start: 123, end: 2135 }, point: 323 }, ]Solo devolví la fila recién agregada en la tabla, pero ignoré que también cambié los valores en la segunda fila.
NOTA : La tabla tiene solo 3 columnas donde todas ellas son editables. coun: { start, end} y point
Puede usar _.differenceWith ( https://lodash.com/docs/4.17.15#differenceWith )
const first=[ { id: '38sj3-23', user: { id: 21323 }, count: { start: 12, end: 24 }, point: 56 }, { id: '38sj3-23', user: { id: 21323 }, count: { start: 8, end: 36 }, point: 49 }, ] const second=[ { id: '38sj3-23', user: { id: 21323 }, count: { start: 12, end: 24 }, point: 56 }, { id: '38sj3-23', user: { id: 21323 }, count: { start: 36, end: 97 }, point: 15 }, { id: null, count: { start: 123, end: 2135 }, point: 323 }, ] let result=_.differenceWith(second, first, _.isEqual) console.log(result) <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script> _.differenceWith :
Este método es como _.difference excepto que acepta comparador que se invoca para comparar elementos de matriz con valores. El orden y las referencias de los valores de los resultados están determinados por la primera matriz. El comparador se invoca con dos argumentos: (arrVal, othVal) .
const a = [ { id: '38sj3-23', user: { id: 21323 }, count: { start: 12, end: 24 }, point: 56 }, { id: '38sj3-23', user: { id: 21323 }, count: { start: 8, end: 36 }, point: 49 }, ] const b = [ { id: '38sj3-23', user: { id: 21323 }, count: { start: 12, end: 24 }, point: 56 }, { id: '38sj3-23', user: { id: 21323 }, count: { start: 36, end: 97 }, point: 15 }, { id: null, count: { start: 123, end: 2135 }, point: 323 }, ]; result = _.differenceWith(b, a, _.isEqual) console.log(result); // your excpected result. <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>