I am trying to find and change a item that is inside of an array of arrays.
My array is like that:
const matriz = [ [ { codigo: 1, imagem: 1, clicou: false, }, { codigo: 2, imagem: 2, clicou: false, }, { codigo: 3, imagem: 3, clicou: false, }, { codigo: 4, imagem: 4, clicou: false, }, { codigo: 5, imagem: 5, clicou: false, }, { codigo: 6, imagem: 1, clicou: false, }, { codigo: 7, imagem: 2, clicou: false, }, { codigo: 8, imagem: 3, clicou: false, }, { codigo: 9, imagem: 4, clicou: false, }, { codigo: 10, imagem: 5, clicou: false, }, ], [ { codigo: 11, imagem: 1, clicou: false, }, { codigo: 12, imagem: 2, clicou: false, }, { codigo: 13, imagem: 3, clicou: false, }, { codigo: 14, imagem: 4, clicou: false, }, { codigo: 15, imagem: 5, clicou: false, }, { codigo: 16, imagem: 1, clicou: false, }, { codigo: 17, imagem: 2, clicou: false, }, { codigo: 18, imagem: 3, clicou: false, }, { codigo: 19, imagem: 4, clicou: false, }, { codigo: 20, imagem: 5, clicou: false, }, ], [ { codigo: 21, imagem: 1, clicou: false, }, { codigo: 22, imagem: 2, clicou: false, }, { codigo: 23, imagem: 3, clicou: false, }, { codigo: 24, imagem: 4, clicou: false, }, { codigo: 25, imagem: 5, clicou: false, }, { codigo: 26, imagem: 1, clicou: false, }, { codigo: 27, imagem: 2, clicou: false, }, { codigo: 28, imagem: 3, clicou: false, }, { codigo: 29, imagem: 4, clicou: false, }, { codigo: 30, imagem: 5, clicou: false, }, ], [ { codigo: 31, imagem: 1, clicou: false, }, { codigo: 32, imagem: 2, clicou: false, }, { codigo: 33, imagem: 3, clicou: false, }, { codigo: 34, imagem: 4, clicou: false, }, { codigo: 35, imagem: 5, clicou: false, }, { codigo: 36, imagem: 1, clicou: false, }, { codigo: 37, imagem: 2, clicou: false, }, { codigo: 38, imagem: 3, clicou: false, }, { codigo: 39, imagem: 4, clicou: false, }, { codigo: 40, imagem: 5, clicou: false, }, ], [ { codigo: 41, imagem: 1, clicou: false, }, { codigo: 42, imagem: 2, clicou: false, }, { codigo: 43, imagem: 3, clicou: false, }, { codigo: 44, imagem: 4, clicou: false, }, { codigo: 45, imagem: 5, clicou: false, }, { codigo: 46, imagem: 1, clicou: false, }, { codigo: 47, imagem: 2, clicou: false, }, { codigo: 48, imagem: 3, clicou: false, }, { codigo: 49, imagem: 4, clicou: false, }, { codigo: 50, imagem: 5, clicou: false, }, ], [ { codigo: 51, imagem: 1, clicou: false, }, { codigo: 52, imagem: 2, clicou: false, }, { codigo: 53, imagem: 3, clicou: false, }, { codigo: 54, imagem: 4, clicou: false, }, { codigo: 55, imagem: 5, clicou: false, }, { codigo: 56, imagem: 1, clicou: false, }, { codigo: 57, imagem: 2, clicou: false, }, { codigo: 58, imagem: 3, clicou: false, }, { codigo: 59, imagem: 4, clicou: false, }, { codigo: 60, imagem: 5, clicou: false, }, ], [ { codigo: 61, imagem: 1, clicou: false, }, { codigo: 62, imagem: 2, clicou: false, }, { codigo: 63, imagem: 3, clicou: false, }, { codigo: 64, imagem: 4, clicou: false, }, { codigo: 65, imagem: 5, clicou: false, }, { codigo: 66, imagem: 1, clicou: false, }, { codigo: 67, imagem: 2, clicou: false, }, { codigo: 68, imagem: 3, clicou: false, }, { codigo: 69, imagem: 4, clicou: false, }, { codigo: 70, imagem: 5, clicou: false, }, ], [ { codigo: 71, imagem: 1, clicou: false, }, { codigo: 72, imagem: 2, clicou: false, }, { codigo: 73, imagem: 3, clicou: false, }, { codigo: 74, imagem: 4, clicou: false, }, { codigo: 75, imagem: 5, clicou: false, }, { codigo: 76, imagem: 1, clicou: false, }, { codigo: 77, imagem: 2, clicou: false, }, { codigo: 78, imagem: 3, clicou: false, }, { codigo: 79, imagem: 4, clicou: false, }, { codigo: 80, imagem: 5, clicou: false, }, ], [ { codigo: 81, imagem: 1, clicou: false, }, { codigo: 82, imagem: 2, clicou: false, }, { codigo: 83, imagem: 3, clicou: false, }, { codigo: 84, imagem: 4, clicou: false, }, { codigo: 85, imagem: 5, clicou: false, }, { codigo: 86, imagem: 1, clicou: false, }, { codigo: 87, imagem: 2, clicou: false, }, { codigo: 88, imagem: 3, clicou: false, }, { codigo: 89, imagem: 4, clicou: false, }, { codigo: 90, imagem: 5, clicou: false, }, ], [ { codigo: 91, imagem: 1, clicou: false, }, { codigo: 92, imagem: 2, clicou: false, }, { codigo: 93, imagem: 3, clicou: false, }, { codigo: 94, imagem: 4, clicou: false, }, { codigo: 95, imagem: 5, clicou: false, }, { codigo: 96, imagem: 1, clicou: false, }, { codigo: 97, imagem: 2, clicou: false, }, { codigo: 98, imagem: 3, clicou: false, }, { codigo: 99, imagem: 4, clicou: false, }, { codigo: 100, imagem: 5, clicou: false, }, ], ]
The way i’m doing it now is using a forEach:
matriz.forEach((x) => { let achou = false; // console.log("x: ", x, id) // console.log("typeof(x): ", typeof x) x.forEach((y) => { if (y.codigo === id) { // Realizo a inversão do booleano y.clicou = !y.clicou; console.log('y: ', y); achou = true; throw BreakException; } }); if (achou) { throw BreakException; } });
The problem is that I can’t stop the loop and I believe there must be a better way, maybe using the ‘find’ command.
I can do this with find when it is a single array.
Advertisement
Answer
I would recommend using a for
loop to iterate over the array and using Array.find
to find the item in the nested arrays, then using a break statement to terminate the loop:
const matriz=[[{codigo:1,imagem:1,clicou:!1},{codigo:2,imagem:2,clicou:!1},{codigo:3,imagem:3,clicou:!1},{codigo:4,imagem:4,clicou:!1},{codigo:5,imagem:5,clicou:!1},{codigo:6,imagem:1,clicou:!1},{codigo:7,imagem:2,clicou:!1},{codigo:8,imagem:3,clicou:!1},{codigo:9,imagem:4,clicou:!1},{codigo:10,imagem:5,clicou:!1}],[{codigo:11,imagem:1,clicou:!1},{codigo:12,imagem:2,clicou:!1},{codigo:13,imagem:3,clicou:!1},{codigo:14,imagem:4,clicou:!1},{codigo:15,imagem:5,clicou:!1},{codigo:16,imagem:1,clicou:!1},{codigo:17,imagem:2,clicou:!1},{codigo:18,imagem:3,clicou:!1},{codigo:19,imagem:4,clicou:!1},{codigo:20,imagem:5,clicou:!1}],[{codigo:21,imagem:1,clicou:!1},{codigo:22,imagem:2,clicou:!1},{codigo:23,imagem:3,clicou:!1},{codigo:24,imagem:4,clicou:!1},{codigo:25,imagem:5,clicou:!1},{codigo:26,imagem:1,clicou:!1},{codigo:27,imagem:2,clicou:!1},{codigo:28,imagem:3,clicou:!1},{codigo:29,imagem:4,clicou:!1},{codigo:30,imagem:5,clicou:!1}],[{codigo:31,imagem:1,clicou:!1},{codigo:32,imagem:2,clicou:!1},{codigo:33,imagem:3,clicou:!1},{codigo:34,imagem:4,clicou:!1},{codigo:35,imagem:5,clicou:!1},{codigo:36,imagem:1,clicou:!1},{codigo:37,imagem:2,clicou:!1},{codigo:38,imagem:3,clicou:!1},{codigo:39,imagem:4,clicou:!1},{codigo:40,imagem:5,clicou:!1}],[{codigo:41,imagem:1,clicou:!1},{codigo:42,imagem:2,clicou:!1},{codigo:43,imagem:3,clicou:!1},{codigo:44,imagem:4,clicou:!1},{codigo:45,imagem:5,clicou:!1},{codigo:46,imagem:1,clicou:!1},{codigo:47,imagem:2,clicou:!1},{codigo:48,imagem:3,clicou:!1},{codigo:49,imagem:4,clicou:!1},{codigo:50,imagem:5,clicou:!1}],[{codigo:51,imagem:1,clicou:!1},{codigo:52,imagem:2,clicou:!1},{codigo:53,imagem:3,clicou:!1},{codigo:54,imagem:4,clicou:!1},{codigo:55,imagem:5,clicou:!1},{codigo:56,imagem:1,clicou:!1},{codigo:57,imagem:2,clicou:!1},{codigo:58,imagem:3,clicou:!1},{codigo:59,imagem:4,clicou:!1},{codigo:60,imagem:5,clicou:!1}],[{codigo:61,imagem:1,clicou:!1},{codigo:62,imagem:2,clicou:!1},{codigo:63,imagem:3,clicou:!1},{codigo:64,imagem:4,clicou:!1},{codigo:65,imagem:5,clicou:!1},{codigo:66,imagem:1,clicou:!1},{codigo:67,imagem:2,clicou:!1},{codigo:68,imagem:3,clicou:!1},{codigo:69,imagem:4,clicou:!1},{codigo:70,imagem:5,clicou:!1}],[{codigo:71,imagem:1,clicou:!1},{codigo:72,imagem:2,clicou:!1},{codigo:73,imagem:3,clicou:!1},{codigo:74,imagem:4,clicou:!1},{codigo:75,imagem:5,clicou:!1},{codigo:76,imagem:1,clicou:!1},{codigo:77,imagem:2,clicou:!1},{codigo:78,imagem:3,clicou:!1},{codigo:79,imagem:4,clicou:!1},{codigo:80,imagem:5,clicou:!1}],[{codigo:81,imagem:1,clicou:!1},{codigo:82,imagem:2,clicou:!1},{codigo:83,imagem:3,clicou:!1},{codigo:84,imagem:4,clicou:!1},{codigo:85,imagem:5,clicou:!1},{codigo:86,imagem:1,clicou:!1},{codigo:87,imagem:2,clicou:!1},{codigo:88,imagem:3,clicou:!1},{codigo:89,imagem:4,clicou:!1},{codigo:90,imagem:5,clicou:!1}],[{codigo:91,imagem:1,clicou:!1},{codigo:92,imagem:2,clicou:!1},{codigo:93,imagem:3,clicou:!1},{codigo:94,imagem:4,clicou:!1},{codigo:95,imagem:5,clicou:!1},{codigo:96,imagem:1,clicou:!1},{codigo:97,imagem:2,clicou:!1},{codigo:98,imagem:3,clicou:!1},{codigo:99,imagem:4,clicou:!1},{codigo:100,imagem:5,clicou:!1}]]; let id = 5; for (let i = 0; i < matriz.length; i++) { const found = matriz[i].find(e => e.codigo == id); if (found) { found.clicou = !found.clicou; console.log("y: ", found) break; } }