¿Cómo obtengo la diferencia entre dos estados de arreglo FIFO?
Tengo dos arreglos que representan un estado tipo FIFO, uno viejo y otro nuevo. Necesito una función que encuentre los elementos recién agregados comparando el nuevo arreglo con el viejo. A continuación, se presentan 3 ejemplos de dos matrices donde se agregaron elementos al principio en comparación con la otra:
// Entrada 1
const arr1 = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’];
const arr2 = [‘a’, ‘b’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]; // se agregaron ‘a’ y ‘b’ al principio
// Entrada 2
const arr3 = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’];
const arr4 = [‘q’, ‘r’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]; // se agregaron ‘q’ y ‘r’ al principio
// Entrada 3
const arr5 = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’];
const arr6 = [‘a’, ‘b’, ‘q’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]; // se agregaron ‘a’, ‘b’, y ‘q’ al principio
// Nueva entrada 4
const arr7 = [‘a’, ‘b’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’];
const arr8 = [‘a’, ‘b’, ‘a’, ‘b’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’]; // se agregaron ‘a’ y ‘b’ al principio
Nótese que la cantidad de elementos recién agregados se elimina del final del arreglo.
Aquí se presenta la funcionalidad deseada de la función getItemsAdded(arr1, arr2):
// Salida deseada para la función ‘getItemsAdded()’
console.log(getItemsAdded(arr1, arr2)); // [ ‘a’, ‘b’ ]
console.log(getItemsAdded(arr3, arr4)); // [ ‘q’, ‘r’ ]
console.log(getItemsAdded(arr5, arr6)); // [ ‘a’, ‘b’, ‘q’ ]
// Nueva
console.log(getItemsAdded(arr7, arr8)); // [ ‘a’, ‘b’ ]
Se siente como un problema tan simple, pero no puedo entenderlo… No pude resolverlo con las soluciones proporcionadas aquí ¿Cómo obtener la diferencia entre dos matrices en JavaScript?, ya que es un problema diferente.
davy.ai
Aquí hay una solución que utiliza Array.prototype.slice() y Array.prototype.every():
javascript
function getItemsAdded(arr1, arr2) {
const diff = arr2.slice(0, arr1.length);
return arr2.slice(0, arr1.length).every((item, index) => item === arr1[index])
? []
: arr2.slice(0, arr2.length – arr1.length);
}