Actualmente tengo una cadena y un conjunto de subcadenas/cadenas de búsqueda que quiero buscar de manera efectiva en la cadena dada. Esto es lo que tengo actualmente:
const apple = "apple" const banana = "banana" const chickoo = "chickoo" const dates = "dates" const eggplant = "eggplant" const default = "default" let string = "foobar" // This String changes dynamically if (string.includes(apple)){ return apple; } else if (string.includes(banana)) { return banana; } else if (string.includes(chickoo)) { return chickoo; } else if (string.includes(dates)) { return dates; } else if (string.includes(eggplant)) { return eggplant; } else { return default; }Este enfoque funciona, sin embargo, estoy buscando una forma más compacta y eficiente de buscar subcadenas en una cadena determinada.
Editar: actualmente estoy usando la siguiente manera:
const fruits = ["apple", "banana", "chickoo", "dates", "eggplant"]; let string = "foobar" //This is dynamic for(let fruit in fruits) { if(string.includes(fruits[fruit])){ return fruits[fruit]; } } return "default";Avíseme si hay una forma aún más efectiva de hacer esto que la anterior.
Usando expresiones regulares:
function matchFruit(input) { const match = input.match(/apple|banana|chickoo|dates|eggplant|default/); if(match) return match[0]; return "default"; } esto solo devolverá la primera fruta coincidente en la cadena. Entonces "foobarapplebanana" devolverá "apple" . Si, en cambio, desea devolver una matriz de cadenas, [ "apple", "banana" ] , devuelva match en lugar de match[0] .
Puede comprobar estos incluye en una línea.
Primero debe crear la lista disponible y luego verificarla. Si no se encuentra en la lista, se devuelve el valor predeterminado.
const apple = "apple" const banana = "banana" const chickoo = "chickoo" const dates = "dates" const eggplant = "eggplant" const default = "default" let string = "foobar" // This String changes dynamically const availableFruits = [apple, banana, chickoo, dates, egplant] return availableFruits.includes(string) ? string : default;Puedes usar filter()
let string = "foobar" //This is dynamic var matchingFruits = fruits.filter(fruit=>string.includes(fruit)) return matchingFruit.length>0?matchingFruit[0]:"default"