Quiero buscar en la matriz de texto , y encontrar uno de estos elementos de la matriz de entrada en el texto, y verificar que si el siguiente elemento o elementos son números, devolver el número o esos números
Pero mi código funciona solo para 1 elemento de número después del elemento de entrada, como mencioné antes, quiero varios números después del elemento de entrada, hasta que llegue a un elemento de tipo cadena.
este es mi codigo:
const entry = [ 'ENTRY', 'ZONE', 'ENTRI', 'ENTRE', 'ENTR', 'ZON', 'ZONI' ]; const text = ['HI', 'GOOD', 564, 'CLX', 'ENTRI', 'YYY', 'ENTRY', 657, 780, 34, 'XXX']; const set = new Set(entry); let result = []; for (let i = 0; i < text.length; i++) { let curr = text[i], next = text[i + 1]; if (set.has(curr) && typeof next == 'number') { result.push(next); } } console.log(result) así que esto es salida: //output : [ 657 ]
lo que quiero: //output : [657 , 780 , 34]
Puede agregar un bucle anidado en la misma variable de bucle y agregar valores de matriz siempre que sean numéricos.
const entry = [ 'ENTRY', 'ZONE', 'ENTRI', 'ENTRE', 'ENTR', 'ZON', 'ZONI' ]; const text = ['HI', 'GOOD', 564, 'CLX', 'ENTRI', 'YYY', 'ENTRY', 657, 780, 34, 'XXX']; const set = new Set(entry); let result = []; for (let i = 0; i < text.length; i++) { if (set.has(text[i])) { while (typeof text[i + 1] == "number") { result.push(text[++i]); } } } console.log(result)su condición dice que el elemento válido debe venir justo después del miembro del conjunto, que solo se aplica al primer elemento, no a todos los elementos.
una forma diferente de hacerlo es activar un indicador de que se encontró un miembro y desactivarlo una vez que llegue a otra cadena que no sea un miembro.
const entry = ['ENTRY' , 'ZONE' , 'ENTRI' , 'ENTRE' , 'ENTR' ,'ZON' , 'ZONI']; const text = ['hi' , 'good' , 564 , 'clx' , 'entri' , 'yyyy' , 'ENTRY' ,657 , 780 , 34 , 'xxxx']; const set = new Set(entry); let result = []; let isAfterMatch = false for (let i = 0; i < text.length; i++) { const curr = text[i]; if (isAfterMatch && typeof curr === 'number') { result.push(curr); } else { isAfterMatch = set.has(curr) } } console.log(result)