Tengo la siguiente cadena de URL como ejemplo

https://jsonplaceholder.typicode.com/todos/101/'

Quiero almacenar 101 para poder usar esa parte de la cadena en alguna otra lógica. Intenté lo siguiente.

const filter = (value)=>{
    return value.split("/").pop();
})

Pero vuelve vacío, por lo que sé, como pop (), pop off last but y last bit es solo / y nada después de eso.

¿Cómo puedo modificar mi código para darme el valor después del penúltimo /

0
Nofel 29 oct. 2019 a las 11:43

4 respuestas

La mejor respuesta

Cuando se divide, el último / se divide como una cadena vacía, que recibe cuando hace estallar (). Si lo eliminamos antes de dividirlo, obtendrá el resultado que desea.

Podrías hacer esto en línea value.slice(0, -1).split('/').pop();

1
Sebastian Sundin 29 oct. 2019 a las 08:49

Si no está seguro de si habrá una barra inclinada final, puede usar el filtro para eliminar todos los elementos vacíos, y luego abrir el '101':

const filter = value => value.split('/').filter(i => i).pop()

console.log(filter('https://jsonplaceholder.typicode.com/todos/101/'))
console.log(filter('https://jsonplaceholder.typicode.com/todos/101'))

filter(i => i) simplemente recorre cada elemento de la matriz para ver si se evalúa como verdadero, por lo que se eliminarán todos los elementos falsos como '' o indefinido.

2
Kobe 29 oct. 2019 a las 08:55

Puede extraer el número antes del último '/' de la siguiente manera.

const url = 'https://jsonplaceholder.typicode.com/todos/101/';

const filter = value => {
    let segments = value.split('/');
    return segments[ segments.length -2];
}

console.log(filter(url));
0
cinch 29 oct. 2019 a las 08:59

Debido a que la URL termina en el delimitador en el que se está dividiendo, el último elemento de la matriz resultante será la cadena vacía, y el penúltimo elemento será la coincidencia que está buscando. Puedes .pop() dos veces:

const filter = (value)=>{
  const splits = value.split('/');
  splits.pop();
  return splits.pop();
};

O puede usar una expresión regular para hacer coincidir caracteres que no sean /, seguidos de / y el final de la cadena ::

const filter = value => value.match(/[^\/]+(?=\/$)/)[0];
console.log(filter('https://jsonplaceholder.typicode.com/todos/101/'))
1
CertainPerformance 29 oct. 2019 a las 08:47