Estoy trabajando con un proyecto angular. Tengo una cadena como la siguiente y ordené todos los caracteres especiales usando expresiones regulares. Ahora, quiero que las primeras 2 cadenas estén entre corchetes y las dos segundas en otro corchete como coordenadas, y el resultado debería ser como el que se muestra a continuación. Por favor, ayúdame a lograr la funcionalidad.
test: any = "((-1.23568 75.87956), (-1.75682 22.87694))"Mi código ts es como:
hello() { this.new = ( this.test.replace(/[^\d. -]/g, '')); this.newarr = this.new.split(" "); const result = this.newarr.filter(e => e); }y mi resultado final en la matriz de resultados es como:
["-1.23568", "75.87956", "-1.75682", "22.87694"]Salida deseada
[ ["-1.23568", "75.87956"], ["-1.75682", "22.87694"] ]Otro enfoque sería usar String.match() para obtener cada grupo de coordenadas, luego Array.map() y String.split() para dividir en pares.
let test = "((-1.23568 75.87956), (-1.75682 22.87694))"; const result = test.match(/[\d.-]+\s[\d.-]+/g).map(s => s.split(/\s/)); console.log('Result:', result); .as-console-wrapper { max-height: 100% !important; top: 0; }Puede evitar una lógica compleja de expresiones regulares y solo, una vez que tenga:
const [a1, a2, b1, b2] = ["-1.23568", "75.87956", "-1.75682", "22.87694"] const result = [[a1, a2], [b1, b2]]O si hay más de dos parejas:
const array = ["-1.23568", "75.87956", "-1.75682", "22.87694", "-1.33343", "3.34432"] const result = []; for(let i = 0; i < array.length; i+=2) { result.push(array.slice(i, i+2)) }Por ejemplo, puede usar Array.prototype.splice() . Esta función puede darle tales 'porciones' para su nueva matriz:
pairs.push(initialArr.splice(0, 2)) Simplemente recorre su matriz inicial initialArr.length/2 veces.
EDITAR: O tal vez pueda actualizar su lógica de reemplazo para obtener no solo un número tras otro, sino también pares (por ejemplo '-1.23568 75.87956,-1.75682 22.87694' ) y luego simplemente dividirlo dos veces.
split(',') --> ['-1.23568 75.87956', '-1.75682 22.87694']y luego bucle y
split(' ')