Estoy tratando de obtener la longitud total de una matriz usando reducir. Pero encontré un problema cuando vi que la longitud tenía el prefijo 'km'. Así que estoy tratando de eliminar (subcadena) el 'km', luego agrego la longitud. Esto es lo que he hecho hasta ahora:
this.totalLength= this.roads.map((road) => road.distance) .reduce((prev, next) => prev + parseFloat(next.substring(2)));Está funcionando pero no está agregando el segundo valor de la matriz a totalLength.
Aquí está la muestra de la matriz:
[ { "Id": "1", "distance": "Km12.20", "name": "Hwy1" }, { "Id": "2", "distance": "Km19.60", "name": "Hwy2" } ]Recomendaría buscar un flotante usando expresiones regulares si cree que puede tener un prefijo o sufijo de cualquier otro texto. Puede usar la expresión regular /(\d*\.)?\d+/ para hacerlo.
Además, <Array>.reduce toma un parámetro adicional para el valor inicial, así que asegúrese de proporcionarlo.
this.totalLength= this.roads.map((road) => road.distance) .reduce((prev, next) => prev + (parseFloat(next.match(/(\d*\.)?\d+/)[0])||0), 0);Lo que hiciste es casi correcto. reduce también espera un segundo argumento que es el valor inicial.
const roads = [ { "Id": "1", "distance": "Km12.20", "name": "Hwy1" }, { "Id": "2", "distance": "Km19.60", "name": "Hwy2" } ] roads .map((road) => road.distance) .reduce((prev, next) => prev + parseFloat(next.substring(2)), 0);