Me pregunto cómo convertir una matriz de cadenas
lines = ['101','010','110'];a una matriz de matrices como esta:
x = [ [1,0,1], [0,1,0], [1,1,0]' ]ya lo intenté
x = (lines.forEach(e => (e.split('')))) y me di cuenta String.split no muta la cadena actual. Entonces, mi siguiente paso fue crear una nueva matriz con estos valores.
x = new Array(lines.forEach(e => (e.split('')))) Mis pensamientos detrás de esta línea: el código debe tomar un elemento (e) de la matriz de líneas y aplicarle la función de división. (que es lo que ocurre cuando console.log() it.) PERO no lo aplica a la nueva matriz.
Tal vez el problema es que no pasa por x , pero tal vez pase por alto otro hecho.
Puede usar .map(Number) en el resultado de split() para convertirlos en un Número como se esperaba
const lines = ['101','010','110']; const res = lines.map(l => l.split('').map(Number)); console.log(res); [ [ 1, 0, 1 ], [ 0, 1, 0 ], [ 1, 1, 0 ] ] Con respecto a su solución forEach , dado que forEach no devuelve nada, x permanece undefined
Podría definir una matriz vacía y empujar su split() en esa matriz vacía, pero usar map() es una solución más legible/limpia.
Para obtener más información sobre map() vs forEach() , consulte esta respuesta de stackoverflow .
Según la respuesta de @OstoneO, Array#map() es el método más apropiado para usar, por lo tanto, sería mi primera opción.
El valor de retorno de Array#forEach() no está definido porque no está diseñado para devolver un valor; es un bucle y debe usarse como tal:
const lines = ['101','010','110']; const x = []; lines.forEach( line => x.push( line.split('').map(n => +n) ) ); console.log( x );Usando el método Array.prototype.reduce ,
['101','010','110'].reduce((acc,val,index)=>{ acc[index] = [...val.split("").map((item)=>parseInt(item))]; return acc; } ,[]);