es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , ,

Answer

  1. Avatar for 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);
    }

Comments are closed.