Recibiré una serie de cadenas a continuación.
En cada cadena, puede haber tres signos: $ , % , * en la cadena
Por ejemplo,
“Preferiría %ser $feliz, %si trabajara en una fábrica de chocolate”
“Está bien jugar al tenis”
“El tenis es un buen deporte”
"AO es realmente *buen deporte"
Sin embargo, puede que no haya señales en él, tal vez solo una señal en él.
Solo hay cinco casos en cadena,
1 . ninguna señal en absoluto,
2 . tener $,% ;
3 . teniendo solo $,
4 teniendo solo %,
5 teniendo solo *
Si no hay señal, no necesito procesarla.
De lo contrario, necesito procesarlo y agregar un indicador a la izquierda del primer signo que aparece en la oración.
Por ejemplo:
“Preferiría ---dolorAndperSign—-$preferiría %ser $feliz, %si trabajara en una fábrica de chocolate”
“El tenis --dollorSign—-$es un buen deporte”
Este es mi código de idea.
Entonces, necesito decidir si la cadena contiene algún signo. Si no hay señal, no necesito procesarla.
texts.map((text) => { if (text.includes("$") || text.includes("%") || text.includes("*")) { //to get the index of signs let indexOfdollar, indexOfper, indexOfStar; indexOfdollar = text.indexOf("$"); indexOfper = text.indexOf("%"); indexOfStar = text.indexOf("*"); //return a completed process text } });Pregunta:
¿Cómo sé qué índice es el más pequeño para ubicar la posición del primer signo que aparece en el texto? Obtener el valor más pequeño puede no ser el enfoque correcto porque puede darse el caso de que obtenga -1 del código anterior.
Me concentré solo en la parte "obtener el índice más pequeño" de su pregunta ... Ya que podrá hacer lo que quiera con él después.
Puede tener indexOf() en una matriz, filtrarlo para eliminar el -1 y luego usar Math.min() para obtener el más pequeño.
Editado para generar un objeto en su lugar, que incluye el primer índice y algunos valores booleanos para la presencia de cada carácter.
const texts = [ "I would $rather %be $happy, %if working in a chocolate factory", "It is ok to play tennis", "Tennis $is a good sport", "AO is really *good sport" ] const minIndexes = texts.map((text,i) => { //to get the signs const hasDollard = text.indexOf("$") >= 0 const hasPercent = text.indexOf("%") >= 0 const hasStar = text.indexOf("*") >= 0 //to get the first index const indexes = [text.indexOf("$"), text.indexOf("%"), text.indexOf("*")].filter((index) => index >= 0) if(!indexes.length){ return null } return { index: Math.min( ...indexes), hasDollard, hasPercent, hasStar } }); console.log(minIndexes)Puede encontrar los caracteres especiales y reemplazar el primero encontrado con un texto.
const replace = s => { const signs = { $: 'dollar', '%': 'per', '*': 'star' }, characters = s.match(/[\$\%\*]/g)?.join('') || '', text = Array .from( new Set(Array.from(characters)), c => signs[c] ) .join('And') + 'Sign'; return s.replace(/[\$\%\*]/, `--${text}--$&`); }, data = ['I would $rather %be $happy, %if working in chocolate factory', 'It is ok to play tennis', 'Tennis $is a good sport', 'AO is really *good sport'], result = data.map(replace); console.log(result); const texts = [ "I would $rather %be $happy, %if working in a chocolate factory", "It is ok to play tennis", "Tennis $is a good sport", "AO is really *good sport" ] texts.forEach(text => { let sighs = ["%","$","*"]; let chr = text.split('').find(t => sighs.find(s => s==t)); if (!chr) return; text = text.replace(chr, "---some text---" + chr); console.log(text); })