Estoy probando algo verdaderamente fácil que es hacer un bucle dentro de una matriz 2D y crear otra matriz al verificar fila por fila.
Por ejemplo, mi matriz 2D contiene los colores hexadecimales de un rango de celdas de una hoja de cálculo de Google. Quiero verificar cada línea y verificar si la identificación del elemento es roja o naranja.
Aquí está mi código de muestra:
var 2Darray = [ [ '#ff0000', '#000000', '#000000' ], [ '#000000', '#ff6d01', '#000000' ], [ '#000000', '#000000', '#000000' ] ] var redHex = "#ff0000"; var orangeHex = "#ff6d01"; var newColors = []; for (var i = 0; i < rangeColor.length; i++) { var keepGoing = true; for (var j = 0; j < rangeColor[i].length; j++) { switch (rangeColor[i][j]) { case redHex: newColors[i] = redHex; console.log("1") keepGoing = false; break; case orangeHex: newColors[i] = orangeHex; console.log("2"); keepGoing = false; break; case "#000000": newColors[i] = "#000000"; console.log("3") keepGoing = false; break; } if (!keepGoing) { break; } } } console.log(newColors); Mi nueva matriz debería ser: [ '#ff0000', '#ff6d01', '#000000' ] pero es [ '#ff0000', '#000000', '#000000' ] lo que indica que hay un problema con mi ciclo pero no puedo entender qué. ¿Quizás el comportamiento de ruptura con doble for loop?
Aunque no estoy seguro de poder entender correctamente su secuencia de comandos, si 2Darray es rangeColor , en su secuencia de comandos, ¿qué tal si keepGoing = false; en case "#000000": como sigue?
Porque cuando se verifica el segundo elemento de la matriz, solo se verifica el primer elemento porque keepGoing = false; en el case "#000000": . Si 2Darray es rangeColor , pensé que este podría ser el motivo de su problema.
Y, en tu script, pensé que var newColors = []; se requiere agregar.
Cuando se modifica su secuencia de comandos, ¿qué tal la siguiente modificación?
var newColors = []; var rangeColor = [ [ '#ff0000', '#000000', '#000000' ], [ '#000000', '#ff6d01', '#000000' ], [ '#000000', '#000000', '#000000' ] ]; var redHex = "#ff0000"; var orangeHex = "#ff6d01"; for (var i = 0; i < rangeColor.length; i++) { var keepGoing = true; for (var j = 0; j < rangeColor[i].length; j++) { switch (rangeColor[i][j]) { case redHex: newColors[i] = redHex; console.log("1") keepGoing = false; break; case orangeHex: newColors[i] = orangeHex; console.log("2"); keepGoing = false; break; case "#000000": newColors[i] = "#000000"; console.log("3") // keepGoing = false; // Removed break; } if (!keepGoing) { break; } } } console.log(newColors);Como otro método, ¿qué tal el siguiente script de muestra?
var rangeColor = [ ['#ff0000', '#000000', '#000000'], ['#000000', '#ff6d01', '#000000'], ['#000000', '#000000', '#000000'] ]; var redHex = "#ff0000"; var orangeHex = "#ff6d01"; var newColors = rangeColor.map(r => r.includes(redHex) ? redHex : r.includes(orangeHex) ? orangeHex : '#000000'); console.log(newColors) // ==> [ '#ff0000', '#ff6d01', '#000000' ]Estoy considerando un error tipográfico en su pregunta de que 2Darray = rangeColor.
Es porque estás rompiendo tu ciclo interno en la primera iteración cada vez. Y por lo tanto, su respuesta es el primer elemento de cada fila.