Actualmente estoy tratando de reducir una cadena a un número [], pero soy nuevo en mecanografiado y simplemente no pude encontrar la manera de escribir mi código para que el compilador de mecanografiado deje de quejarse...
Lo que estoy tratando de hacer:
matString.split(/[\n ]/).reduce((acc, cur, index) => acc[index] = Number(cur));Hasta ahora, he intentado escribirlo así, pero simplemente no funciona :(
matString.split(/[\n ]/).reduce((acc: Array<number>, cur, index) => acc[index] = Number(cur)) as Array<number>;Solo por contexto, este código recibe una matriz en el formato de una cadena y quiero convertirla en una matriz para poder trabajar con ella. Ya me encontré con este problema en diferentes circunstancias y tuve que solucionarlo, pero esta vez me gustaría entender cómo solucionarlo.
Además, si ayuda a explicar mejor mi problema, aquí hay una imagen de mi código seguida del error del compilador: imagen de código con error
Esta es parte de mi solución a este ejercicio sobre el ejercicio .
Si bien es posible , sería mucho más fácil evitar .reduce y simplemente asignar la cadena dividida a Number , sin necesidad de tipeo explícito:
const result = matString .split(/[\n ]/) .map(Number); Si tuvo que ir a la ruta .reduce , use genéricos para indicar el tipo de acumulador y recuerde devolver el acumulador al final de la devolución de llamada:
const result = matString.split(/[\n ]/).reduce<Array<number>>((acc, cur, index) => { acc[index] = Number(cur); return acc; }, []);Si la entrada se compone de una cadena que contiene caracteres numéricos, podría ser mejor hacer coincidir esos caracteres, en lugar de dividir en líneas nuevas y espacios:
const result = matString .match(/\d+(?:\.\d+)?/g) // assuming there will always be at least one match .map(Number);