Tengo una serie de cadenas:
listOfTypes = ['blogPost', 'work']
Y tengo un routeName routeName = blogPost-slug o routeName = blogPost ;
Cuando routeName contiene = blogPost , quiero devolver la cadena "página".
Si routeName comienza con string- (ejemplo: blogPost- ), quiero devolver el tipo (de listOfTypes )
Hice una función forEach que funciona. Solo obtengo varios resultados (es normal) cuando solo quiero uno (si está presente en la matriz, devuelvo el tipo o la page )
listOfTypes = ['blogPost', 'work']; // routeName is retrieved dynamically. This is for example, "blogPost" or "blogPost-slug" or "work-slug" listOfTypes.forEach(type => { // Check if route name starts with type + "-" because it's separator with subroute // (/blogPost is a page, /blogPost-slug is a blogPost so check for blogPost-) if(routeName.startsWith(type + '-')) { return console.log(type); } else { return console.log('page'); } }); // result: 'blogPost' and 'page' // expected result: 'blogPost'¿Cómo puedo hacer esto y solo obtener el tipo o la "página" si no coincide?
Gracias
Usando Array#find :
const listOfTypes = ['blogPost', 'work']; const getType = route => listOfTypes.find(type => route.startsWith(`${type}-`)) ?? 'page'; console.log( getType('blogPost') ); console.log( getType('blogPost-slug') ); console.log( getType('work-slug') );