Tengo una matriz: A = [ 2, 2, 0, 0, -1, 1, -1, -1, -1 ]
Quiero poder devolver verdadero en los casos en que 2 o más números consecutivos sean iguales. Entonces, en esta matriz, la matriz de salida debe tener 5 verdaderos con [2,2], [0,0], [-1,-1,-1], [-1,-1] y [-1,-1 ].
Hasta ahora, he usado slice y map en la matriz a través de 2 números consecutivos y obtuve 4 verdaderos.
const solution = (A) => { let compare = A.slice(1).map((n,i) => { return (n === A[i]) }) console.log(compare) // => [ true, false, true, false, false, false, true, true ] } const A = [ 2, 2, 0, 0, -1, 1, -1, -1, -1 ]; solution(A);Pero lograr que ese quinto sea verdadero en [-1,-1,-1] me está eludiendo.
Actualmente, la salida de comparación que tengo solo pasa por 2 números consecutivos, por lo que me da 4 verdaderos. Mi pregunta es básicamente cómo verificar los 3 o más números consecutivos.
Mi final sería algo como
compare.filter(word => word === true).lengthpara obtener 5.
Quizás lo que realmente sería útil son los grupos :
const findGroups = (arr) => arr.reduce((result, value, index) => { let windowLength = 2; while (arr[index + windowLength - 1] === value) { result.push(arr.slice(index, index + windowLength)); windowLength++; } return result; }, []); console.log(findGroups([2, 2, 0, 0, -1, 1, -1, -1, -1])); // [[2, 2], [0, 0], [-1, -1], [-1, -1, -1], [-1, -1]] console.log(findGroups([4, 4, 4, 4])); // [[4, 4], [4, 4, 4], [4, 4, 4, 4], [4, 4], [4, 4, 4], [4, 4]] Eso le da una matriz de los grupos de valores consecutivos. Si solo desea 5 , es .length , o puede calcularlo directamente en lugar de crear matrices innecesarias:
const findGroupCount = (arr) => arr.reduce((result, value, index) => { let windowLength = 2; while (arr[index + windowLength - 1] === value) { result++; windowLength++ } return result; }, 0); console.log(findGroupCount([2, 2, 0, 0, -1, 1, -1, -1, -1])); // 5 console.log(findGroupCount([4, 4, 4, 4])); // 6Comprobación de cadenas duplicadas en la matriz de JavaScript
La pregunta/respuesta anterior es un excelente lugar para comenzar. Pero explícitamente lo que quieres:
const A = [ 2, 2, 0, 0, -1, 1, -1, -1, -1 ] let findDuplicates = arr => arr.filter((item, index) => arr.indexOf(item) != index) const solutionArray = findDuplicates(A).map((e) => true); console.log(solutionArray); // [true, true, true, true, true]Para hacer esto consecutivamente, su código funciona como se esperaba:
[2,2] Verdadero [2,0] Falso [0,0] Verdadero [0,-1] Falso [-1,1] Falso [1,-1] Falso [-1,-1] Verdadero [-1 ,-1] Verdadero
Esas son las comparaciones en orden comparando 2 números consecutivos. La quinta verdad que esperas es comparar 3 números consecutivos.
¿Está pidiendo una solución que también compare (n) número de números consecutivos?