Tengo dos matrices, todas con valores únicos y quiero compararlas para obtener una lista de todos los valores consecutivos
const array1 = [1a,4a,3h,78h,5b,6b,7h] const array2 = [3h,1a,4a,5b,6b,7h]En este caso, quiero comparar cualquier número de valores coincidentes consecutivos. Quiero una lista de todos los pares o cualquier número de valores únicos coincidentes consecutivos que tengan, lo que me da una lista como esta.
const array3 =[[1a,4a],[5b,6b,7h]]¿Cuál sería la mejor manera de hacer esto?
La única solución que se me ocurre es (debería haber muchas mejores), primero para crear todos los subarreglos posibles: por ejemplo: const array1 = [1a,4a,3h,78h,5b,6b,7h] const array2 = [3h,1a ,4a,5b,6b,7h]
submatriz const = [[1a,4a],[3h], [5b,6b,7h]]
una vez que tenga el subarreglo, puede asignarlos a un nuevo arreglo con su ubicación máxima en cualquier arreglo con respecto al subarreglo:
const maxLocation = [[1,2][2][4,5,6]]; Ahora necesitas encontrar la secuencia más larga => [[1,2][4,5,6]]
fetchValues = (array1, array2) => { let result = [[]]; let loop = (i, j) => { if (i >= array1.length || j >= array2.length) { return; } if (array1[i] == array2[j]) { result[result.length - 1].push(array1[i]); loop(++i, ++j); return; } let nextIndex1 = array1.indexOf(array2[j], i); let nextIndex2 = array2.indexOf(array1[i], j); nextIndex1 = nextIndex1 < 0 ? Infinity : nextIndex1; nextIndex2 = nextIndex2 < 0 ? Infinity : nextIndex2; if (nextIndex1 !== Infinity || nextIndex2 !== Infinity) { result[result.length - 1].length === 0 || result.push([]); nextIndex1 > nextIndex2 ? loop(i, nextIndex2) : loop(nextIndex1, j) } } loop(0, 0); const finalresult= result.filter(array=>array.length>1) return finalresult; }Esta es la forma en que me funcionó. Si alguien tiene otra forma, no dude en compartirla.