Hice una función que elimina la última parte de la cadena que siempre comenzará desde _ y obtendrá el número entero, pero todo lo que obtengo es la parte del texto y no el número entero.
¿Cómo se puede lograr esto?
function splitLast(arg) { if (arg.includes(".") && arg.includes("_")) { return parseFloat(arg.split("_").pop()) } else if (arg.includes(".") != true && arg.includes("_")) { return parseInt(+arg.split("_").pop()) } else { throw "Arguments passed does not contain the valid result characters or isnt a required Datatype for thefunction" } } console.log(splitLast("22_no"), 'should be 22') console.log(splitLast("22.1_no"), 'should be 22.1')UPD: una solución mejor
Puede usar la función parseFloat() sin verificaciones adicionales ni análisis de cadenas (lo hará todo por usted):
function splitLast(arg) { if (isNaN(arg.trim()[0])) { throw new Error('argument is not valid') } return parseFloat(arg) } console.log(splitLast("22_no"), 'should be 22') console.log(splitLast("22.1_no"), 'should be 22.1') console.log(splitLast("a22.1_no"), 'should throw') console.log(splitLast(" a22.1_no"), 'should throw') Se necesita la comprobación isNaN() porque parseFloat(string) devuelve:
Solución antigua:
Probablemente, tenga que usar el método shift() en lugar de pop() .
El método pop() elimina el último elemento de una matriz y devuelve ese elemento. Este método cambia la longitud de la matriz.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop
El método shift() elimina el primer elemento de una matriz y devuelve ese elemento eliminado. Este método cambia la longitud de la matriz.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
function splitLast(arg) { if (arg.includes(".") && arg.includes("_")) { return parseFloat(arg.split("_").shift()) } else if (arg.includes(".") != true && arg.includes("_")) { return parseInt(arg.split("_").shift()) } else { throw "Arguments passed does not contain the valid result characters or isnt a required Datatype for thefunction" } } console.log(splitLast("22_no"), 'should be 22') console.log(splitLast("22.1_no"), 'should be 22.1')Podrías usar una expresión regular y .replace :
function splitLast(value) { return value.replace(/_.*$/, ''); } console.log(splitLast("22_no"), 'should be 22') console.log(splitLast("22.1_no"), 'should be 22.1')Puede usar esto para eliminar el texto de la cadena y solo quedan los números con guiones bajos.
var ret = "22.1_no"; var str = ret.replace(/[^0-9\.]+/g, ""); console.log("_"+str);