
Diego ferney Cárdenas Hoyos
PreguntaHola, espero estén muy bien, yo intenté hacer este ejercicio con un switch pero no me funcionó. Alguien sabe por qué ?.
Aquí está mi código:
function solution(car) { switch (car) { case (car.licensePlate === true): car.drivingLicense = true; break; default: car.drivingLicense = false; } }

Edgar Mauricio Barragan Ariza
Diego mira que en el código se pegan las palabras, incar en realidad debía ir como in car, no lo podías borrar. Prefiero usar el if, pero como ando estudiando todo de javascript de cero ( ya había estudiado antes, soy profesor de inglés, pero empezaré ingeniería de software el año entrante, entonces ando repasando todos los temas. En qué temas andas, estudiemos juntos, yo ando en modo estudioso y tengo varias técnicas de estudio que como profe uso. Mi número es 3146427617

Diego ferney Cárdenas Hoyos
Hola Mauro... Eh... jajaja, me gustaría estudiar contigo. Ehh... Muchas gracias por enseñarme algo nuevo, no conocía esa propiedad (Al igual soy nuevo en esto, así que es normal). Estuve probando el último código adicional pero igual no me funcionó, (borré "incar" porque me parecía como error he igual me retornó como false en todas las ocasiones la propiedad drivingLicense. Sabiendo que hemos tenido una larga charla acerca del switch en este panel, me gustaría saber si prefieres usar "switch" o "if " para este problema en específico. Gracias por tanto feeback, buena suerte,

Edgar Mauricio Barragan Ariza
Diego adicional a mi última respuesta. Estuve viendo el porqué no me funcionaba el código anterior y es que yo puse car, y en lugar de ello era true. Debió ser eso lo que yo coloqué en el playground, pero luego lo cambié y como te dije en mi respuesta anterior, si se colocaba car, se comparaba el valor de todo el objeto con el de la propiedad, sin embargo al comparar true con licensePlate in car, se compara booleano con booleano.
function solution(car) { switch (true) { case "licensePlate" in car: car.drivingLicense = true; break; default: car.drivingLicense = false; } return car; } console.log(solution({ color: 'red', brand: 'Kia' })); console.log(solution({ color: 'gray', brand: 'Chevrolet', drivingLicense:4354 })); console.log(solution({ licensePlate: 'RGB255' }));

Edgar Mauricio Barragan Ariza
Hola Diego, no sé por qué el playground me pasó lo que hice como bien sí efectivamente tienes razón, siempre da false, o no sé qué fue lo que hice diferente, pero la respuesta estaba incorrecta. Sin embargo estuve analizando el caso y encontré una solución que sí funciona, la verdad me gusta cuando algo no sale bien o tengo la duda porque exploro diferentes opciones. El switch funciona con el siguiente código usando hasOwnProperty() y cambiando el valor del switch a true para que entre al switch y allí se evalue si la propiedad licensePlate existe o no: así:
function solution(car) { switch (true) { case car.hasOwnProperty('licensePlate'): car.drivingLicense = true; break; default: car.drivingLicense = false; } return car; } console.log(solution({ color: 'red', brand: 'Kia' })); console.log(solution({ color: 'gray', brand: 'Chevrolet', licensePlate: 'AAA111' })); console.log(solution({ licensePlate: 'RGB255' }));
En el código que te había dado se comparaba el valor del objeto car con el de licensePlate y siempre son diferentes entre sí, por lo cual el switch toma el valor default siempre.

Diego ferney Cárdenas Hoyos
Hola otra vez Mauro, espero estés bien. Ehh... Muchas gracias por tu insistente ayuda, me alegra saber que hay un compañero tan motivado por aprender (también estoy muy motivado).
Ehh no, el código que me dices tampoco funciona, siempre retorna false, independientemente si el objeto si lleva la "licensePlate" o no.
Mira, leyendo y practicando di con la respuesta, lo que pasa es que la estructura switch no evalua condiciones y cuando tu le dices:
case 'esto es el caso 1': imprime esto;
break;
case ' esto es el caso 2': imprime mejor esto;
break;
default: 'si no hay ninguna haz esto'
}
Tú le estás diciendo, mira si el caso 1 es verdadero haz lo siguiente sino haz el siguiente caso y así. Creo que lo que se está evaluando ya debe de estar definido para que funcione.
Creo que el switch no va con este problema.

Edgar Mauricio Barragan Ariza
*Corrijo aquí ya que no me deja hacerlo en el anterior comentario: function está pegado a el nombre de la FUNCIÓN, por eso no funcionaba correctamente el código

Edgar Mauricio Barragan Ariza
Hola diego, ya vi que function está pegado a el nombre de la variable y por eso no te funciona. contestando a la pregunta, el switch funciona dentro de cada caso con valores, en ese caso necesitarías como valor true, Por eso al poner car.licensePlate es como si dijeras en otras palabras: true.
Cuando se usa una expresión en un caso de un switch, se evalúa esa expresión y se compara con el valor del switch. Si el valor coincide, se ejecuta el código del caso correspondiente. Pero lo que tú hiciste fue comparar car.licensePlate con true.
Agrego lo siguiente, recuerda que lo que se requería era que evaluaramos que la propiedad car.license exista en car. Pero lo que tú estás haciendo es comparando el valor de car.license con true. Cuando deberías comparar si el valor de car.license existe en car. Por eso te dije que debías poner un valor como tal, no una comparación en ese caso.
Te dejo nuevamente mi código que pasó la prueba completo para que lo compruebes en consola. Si tienes una duda adicional no dudes en preguntarme, estuve confundido con el uso del switch también y alguien me explicó con claridad para poderlo entender, saludos.
function solution(car){ switch (car) { case (car.licensePlate): car.drivingLicense = true; break; default: car.drivingLicense = false; } return car; } console.log(solution({ color: 'red', brand: 'Kia', }));
el resultado es: { color: 'red', brand: 'Kia', drivingLicense: false }
te dejo además un ejemplo para que lo analices. En este switch se compara el valor con la variable x. El que cumple con esto es el caso tres por eso en consola se imprime x es 3. Mira que en caso solo se coloca un valor, el valor del número 1 en el caso 1, el valor del número 2 en el caso 2 y así sucesivamente. Lo de la numeración del caso no es explícita, los números no tienen que ver con la númeración de cada caso, cada número es un valor que se debe comparar con el número o valor que está en la variable let( yo te hablé del orden de los casos que está de forma implícita de arriba hacia abajo pero los números no tienen que ver con ese orden) Intenta cambiar los números y podrás verlo.
let x = 3; switch (x) { case 1: console.log("x es 1"); break; case 2: console.log("x es 2"); break; case 3: console.log("x es 3"); break; default: console.log("x es otro valor"); }

Diego ferney Cárdenas Hoyos
Hola Mauro. A qué te refieres con "el caso debería ser un valor como tal"?. No lo entendí muy bien, me lo podrías explicar?. Posdata: tu código no funciona como debería, pero muchas gracias por la aclaración del return. Buena suerte amigo.

Edgar Mauricio Barragan Ariza
Hola Diego, problablemente ya diste con la respuesta, sin embargo tu código no funciona porque el caso debería ser un valor como tal. Y afuera de switch deberías ponerle return car; así te funcionará:
function solution(car){ switch (car) { case (car.licensePlate): car.drivingLicense = true; break; default: car.drivingLicense = false; } return car; }