Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

241
Visualizações
React - setting value for all array of objects

I'm creating a simple tracker that has a state checking if the button is either false (not checked) or true (checked).

The structure of my data is something like this:

const [test, setTest] = useState([
  {
    character: 1,
    two: [
      { name: "one", id: 1, check: false },
      { name: "two", id: 2, check: true },
    ],
  },
  {
    character: 2,
    two: [
      { name: "one", id: 1, check: true },
      { name: "two", id: 2, check: false },
    ],
  },
])

I tried creating a function that resets all of the check values back to false.

The user can delete a character or add more so I need to reset all character checks at the same time. I managed to do this but I'm not sure if the method I used is acceptable or not.

The only way I could solve this is to create a variable which has the value of my test state then make changes to the array and at the end; set my test state to equal the array.

    let array = test

array.forEach((arr, index) => {
  array = ([
    ...array.slice(0, index),
    {
      character: arr.character,
      two: [
        { name: "one", id: 1, check: false },
        { name: "two", id: 2, check: false },
      ],
    },
    ...array.slice(index + 1)
  ])
})

setTest(array)

I spent some time trying to make this work using only the test state but always encountered the same issue that it would only reset the two checks of the last character in the array.

If anyone could help me with understanding this better and if there is a way to write this without having to use a variable(array) that would be great, thanks.

edit: I forgot to include that the two array will sometimes have more or less objects in the array so would need to change all their values. example:

 [{
  character: 1,
  two: [
    { name: "one", id: 1, check: false },
    { name: "two", id: 2, check: true },
  ],
},
{
  character: 2,
  two: [
    { name: "one", id: 1, check: true },
    { name: "two", id: 2, check: false },
    { name: "three", id: 3, check: false },
    { name: "four", id: 4, check: true },
  ],
},

]

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

You could use Array.map, which will return a new array with reset values.

const resetTest= test.map((arr, index) => {
  return {
    character: arr.character,
    two: [
      { name: "one", id: 1, check: false },
      { name: "two", id: 2, check: false },
    ],
  };
});

// You may need to use this syntax to set the array...
setTest((testValues) => [...testValues, ...resetTest]);
about 4 years ago · Juan Pablo Isaza Relatório

0

Just use setTest state update dispatch method and map through all of your previous state array entries to return new array which will hold updated object, where they will have all properties spread from old object and property two will also be mapped new array with immutably updated objects (check set to false).

    const resetToFalse = () => {
        setTest(prevState => prevState.map(entry => ({
            ...entry,
            two: entry.two.map(obj => ({ ...obj, check: false }))
        }
        )));
    }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda