Estoy tratando de hacer un verificador de URL con js, esta es la parte del código con la que tengo problemas:
switch (true) { case document.location.pathname.includes("/account"): presenceData.details = "Viewing account..." break case document.location.pathname.includes("/mylist"): presenceData.details = "Viewing list..." break } }la URL con la que estoy trabajando es {example.com}/account/profiles/mylist y cuando pruebo /mylist me sigue mostrando "Viewing account..." ¿qué puedo cambiar para que /account no interfiera con /mylist ?
El problema aquí es que {example.com}/account/profiles/mylist contiene las cadenas "/account" y "/mylist" . Entonces, cuando golpea su primer caso, se hace una coincidencia y luego sale del break .
let pathname = '/account/profiles/mylist'; switch (true) { case pathname.includes("/account"): console.log("Viewing account..."); break; case pathname.includes("/mylist"): console.log("Viewing list..."); break; } Si sabe que /mylist siempre estará más abajo en la jerarquía, debajo de /account , podría simplemente cambiar el orden de los casos:
let pathname = '/account/profiles/mylist'; switch (true) { case pathname.includes("/mylist"): console.log("Viewing list..."); break; case pathname.includes("/account"): console.log("Viewing account..."); break; } De lo contrario, es posible que necesite un enfoque lógico más matizado, y es posible que desee evitar el uso de sentencias de switch a favor de las sentencias if / else , ya que hay algunas peculiaridades en un switch (específicamente, que una vez que se cumple un solo caso, todos los demás bloques de casos se interpretará como coincidente hasta que se break ).
EDITAR:
O, otra alternativa sería aprovechar endsWith con en su lugar:
let pathname = '/account/profiles/mylist'; switch (true) { case pathname.endsWith("/account"): console.log("Viewing account..."); break; case pathname.endsWith("/mylist"): console.log("Viewing list..."); break; }DIVULGACIÓN COMPLETA : mientras escribía esta edición , esqew publicó la misma solución .
¿Por qué no usar endsWith() en su lugar...?
switch (true) { case document.location.pathname.endsWith("/account"): presenceData.details = "Viewing account..." break case document.location.pathname.endsWith("/mylist"): presenceData.details = "Viewing list..." break } } Tangencial, pero las declaraciones switch están (en mi opinión) desactualizadas y se vuelven difíciles de leer/mantener (considerando la necesidad de break todas las condiciones); además, su uso de switch (true) es un poco abusivo de lo que se supone que debe lograr un switch . Probablemente debería estar simplemente usando declaraciones if / else if de todos modos:
if (document.location.pathname.endsWith("/account")) { presenceData.details = "Viewing account..."; } else (document.location.pathname.endsWith("/mylist")) { presenceData.details = "Viewing list..."; }