Skip to content

Find and change item in Javascript array of arrays

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.

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;
  }
}