-2

Tengo el siguiente código para comprobar si la primera letra de una cadena es mayúscula o no. ¿Se puede optimizar más el siguiente algoritmo quizás con el condicional ternario?

'use strict'

var cadena = 'EsAS';

var mayusculas ='ABCDEFGHIJKLMNÑOPQRSTUWVXYZ';

var respuesta=''

for(var i=0;i < mayusculas.length;i++){

    if(cadena[0]==mayusculas[i]){

        respuesta="la primera letra es mayuscula"
    }

}

console.log(respuesta)
Alvaro Montoro
  • 48,157
  • 26
  • 100
  • 179
Rangel
  • 89
  • 1
  • 1
  • 7
  • La pregunta se basa principalmente en opiniones pues no indica ningún criterio de optimización, como reducir el número de líneas de código, mejorar el tiempo de ejecución, etc. – Rubén Oct 21 '18 at 20:32

5 Answers5

6

Puedes hacerlo sin buscar tu primera letra en otra cadena haciendo lo siguiente.

function esMayuscula (str) {
  if (str[0] === str[0].toUpperCase()) {
    return 'la primera letra es mayuscula';
  }
  return 'la primera es miniscula';
}
console.log(esMayuscula('EsAs'));
console.log(esMayuscula('esAs'));

Solamente verificas tu primer elemento con el primer elemento siempre en mayúscula.

Aníbal Jorquera
  • 1,066
  • 4
  • 11
0

El operador ternario reduciría código solamente. Puedes usar las funciones que te brinda javascript como indexOf.

Ejemplo:

'use strict'

var cadena = 'EsAS';

var mayusculas ='ABCDEFGHIJKLMNÑOPQRSTUWVXYZ';

var respuesta=''
if (mayusculas.indexOf(cadena[0]) >= 0){
    respuesta="la primera letra es mayuscula"
}

La función indexOf te devuelve la posición donde se encuentra el carácter que buscas en el string mayusculas, si devuelve -1 es que no lo ha encontrado.

Saludos.

lDanny7
  • 1,526
  • 6
  • 10
0

MEJORAS

Ayúdate de lo sigueinte para mejorar tu código

  1. en lugar de === para comparar si el valor existe; en ES6 existe inlcudes
  2. ya no uses var sustituyelo por let para variables

Tú código

    let cadena = 'EsAS';
    let mayusculas ='ABCDEFGHIJKLMNÑOPQRSTUWVXYZ';
    
    let respuesta=''
    
    for(let i=0;i < mayusculas.length;i++){
    
        if(cadena[0].includes(mayusculas[i])){
            respuesta = "la primera letra es mayuscula"
        }
    }
    
    console.log(respuesta)
  • 2
    `'use strict';` es totalmente necesario a menos que declares el código como un módulo (en cuyo caso el modo estricto ya está activado) – Pablo Lozano Oct 18 '18 at 14:09
  • añado documentacion del [`'use strict'`](https://es.stackoverflow.com/a/2185/28035) – JackNavaRow Oct 18 '18 at 14:50
  • Gracias compañeros por la corrección y referencia pues según de un curso aprendí que ya no era necesario pero no me dijeron el por qué –  Oct 18 '18 at 14:56
  • en el ejemplo que colocastes definistes todas las variables , si quitas una definicion y agregas el `use strict` te dara error que la variable es indefinida(no declarada) – JackNavaRow Oct 18 '18 at 15:11
  • Si @ JackNavaRow ahora comprendo mejor su uso gracias pues estaba en un error –  Oct 18 '18 at 15:15
0

Si se puede, incluso no hace falta el bucle for. Lo puedes hacer utilizando la function indexOf, es decir comprobar si en la variable mayusculas existe la primera letra de la variable cadena.

let cadena = 'EsAS';

let mayusculas ='ABCDEFGHIJKLMNÑOPQRSTUWVXYZ';

//Operador termario
let respuesta = mayusculas.indexOf(cadena[0]) > -1 ? "la primera letra es mayuscula": ""

console.log(respuesta)
MitaCloud
  • 2,632
  • 7
  • 20
-1

Viendo todas las demás respuestas en negativo igual quise intentarlo y ver si podía dar una respuesta válida. Simplemente cree una función el cual recibe la cadena y siempre esta evaluando el primer caracter de la cadena con sigo misma pero en mayúscula así:

cadena.charAt(0) === cadena.charAt(0).toUpperCase()

'use strict'

const mayuscula = (cadena) => {
  return (cadena.charAt(0) === cadena.charAt(0).toUpperCase()) ? "la primera letra es mayuscula" : "la primera letra NO es mayuscula";
}

let cadena = 'EsAS';
let cadena2 = 'esAS';
console.log(mayuscula(cadena));
console.log(mayuscula(cadena2));

Espero que sea lo que andas buscando.