Tengo una matriz que actualmente estoy desglosando con la función de mapa para obtener solo el índice de opciones de la matriz original. Esto funciona, pero ahora quiero eliminar esto y obtener solo los primeros 2 dígitos numéricos de ese índice de opciones (o más específicamente, cualquier cosa delante del '-' en ese valor)
¿Cuál es la mejor manera de eliminar solo esos dígitos mientras lo mapeo de la forma en que estoy actualmente?
var vm = new Vue({ el: "#app", data: { options: [ {id:100, option:"1 - John Doe"}, {id:200, option:"2 - Jane Doe"} ] }, methods: { getNames(){ let names = this.options.map(option => { return { id: option.option } }); console.log(names); } } }) <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <button @click="getNames()">TEST</button> </div>Puede editar la devolución de llamada de su map para obtener la primera parte de la cadena:
let options = [ {id:100, option:"1 - John Doe"}, {id:200, option:"2 - Jane Doe"} ]; let names = options.map(option => { let opt = option.option; id = opt.split(' - ')[0]; return { id }; }); console.log(names);JavaScript puro para devolver solo números de cadena .
Ejemplo de matriz devuelta:
[ {id: "1"}, {id: "2"} ] Use replace con una expresión regular para eliminar cualquier elemento no numérico de la cadena: devuelva solo números (como cadena).
La expresión regular se aplica a todas las ocurrencias usando la bandera global detrás de las barras inclinadas //g . El patrón dentro de las barras puede ser cualquiera de esos equivalentes para mantener solo los dígitos numéricos:
\D coincide con todos los caracteres que no son números (metacarácter)[^0-9] coincide con todos los caracteres que no son números (rango de caracteres invertido)Manifestación:
let options = [ {id:100, option:"1 - John Doe"}, {id:200, option:"2 - Jane Doe"} ]; // keep only the first digits before hyphen let names = options.map(o => { return {id: o.option.replace(/[^0-9]/g, "")}; }); console.log(names);const names = this.options.map(option => { const text = option.option // Get raw text from 'option' const parts = text.split('-') // Split text string by the '-' (returns an array, Eg ["1 ", " John Doe"]) return parts[0] // The first element of 'parts' is the result you are looking for (note it is a string, not a number) })