Sé que es una pregunta bastante simple, pero para cualquiera que sea nuevo en Javascript esto puede ser interesante.
¿Hay alguna forma más rápida de analizar esta cadena y obtener el color de la fruta como se muestra a continuación?
var fruitAndColors = "APPLE=RED&GUAVA=GREEN&STRAWBERRY=RED&BANANA=yellow&ORANGE=orange" var applecolor = getColor("APPLE") // RED var bananaColor = getColor("BANANA") //yellowAquí hay un enfoque de match de expresiones regulares:
function getColor(fruitAndColors, fruit) { return fruitAndColors.match(new RegExp("\\b" + fruit + "=([^&]+)"))[1]; } var fruitAndColors = "APPLE=RED&GUAVA=GREEN&STRAWBERRY=RED&BANANA=yellow&ORANGE=orange" console.log(getColor(fruitAndColors, "APPLE")); // RED console.log(getColor(fruitAndColors, "BANANA")); //yellow Para el caso de buscar APPLE usamos el siguiente patrón regex:
\bAPPLE=([^&]+)Esto coloca la clave (el color) en el primer grupo de captura, que luego devuelve la función auxiliar.
Regex probablemente sea la mejor apuesta para esto, sin embargo, definitivamente no es mi punto fuerte. Dicho esto, esto es lo que se me ocurrió con solo un poco de Javascript:
var fruitAndColors = 'APPLE=RED&GUAVA=GREEN&STRAWBERRY=RED&BANANA=yellow&ORANGE=orange'; const getColor = (key) => { const entries = fruitAndColors.split('&').reduce((acc, val) => { const [fruit, color] = val.split('='); acc[fruit] = color; return acc; }, {}); return entries[key]; }; var appleColor = getColor('APPLE'); // RED var bananaColor = getColor('BANANA'); //yellowUna pequeña clase que maneja ese tipo de análisis de URL
class UrlParse { #objects; constructor(uri) { this.uri = uri this.objects = {} this.parse() } parse() { let arr = this.uri.split('&') for (let a of arr) { let arr = a.split(/\=/) this.objects[arr[0]] = arr[1] } } getName(name) { return this.objects[name] } } var fruitAndColors = "APPLE=RED&GUAVA=GREEN&STRAWBERRY=RED&BANANA=yellow&ORANGE=orange" let p = new UrlParse(fruitAndColors) console.log(p.getName('BANANA'))