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

162
Visualizações
Cómo actualizar los datos dentro de la matriz anidada

Tengo una estructura de datos como esta:

 const data = [ { question: 'string of question', parentId: '1', userChoice: 'Yes', child: [] }, { question: 'string of question', parentId: '2', userChoice: 'No', child: [ { id: 6, sub_question: 'sub question', weightage: 1 }, { id: 7, sub_question: 'sub question', weightage: 1 }, { id: 8, sub_question: 'sub question', weightage: 1 } ] } ]

Puedo manejar la primera capa de datos sin una matriz secundaria.

Así es como lo estoy haciendo;

 // states const deviceReport = localStorage.getItem('deviceReport') ? JSON.parse(localStorage.getItem('deviceReport')) : [] const [data, setData] = useState(deviceReport) const [childData, setChildData] = useState([]) // To Put user response via question param to data and then persist it with localStorage const handleClickYes = (question) => { // find if question is in the data array const hasQuestion = data.find(({ parentId }) => question.id === parentId) const indexOfQuestion = data.indexOf(hasQuestion) // copy data to mutable object let newData = [...data] if (hasQuestion) { // update the value with specific selected index in the array. newData[indexOfQuestion] = { question: question.if_yes, parentId: question.id, userChoice: 'YES', child: [] } } else { // concat existing data with a new question newData = [ ...newData, { question: question.if_yes, parentId: question.id, userChoice: 'YES', child: [] } ] } localStorage.setItem('deviceReport', JSON.stringify(newData)) setData(newData) }

De manera similar, ahora quiero agregar los datos a la matriz child con una lógica similar, como si la matriz secundaria tiene la misma clave, entonces no debería concatenar; de lo contrario, debería concatenar la matriz secundaria

Intenté seguir este método para construir childData primero y luego concatenar en data.child[] Pero esto no funciona ni siquiera para recopilar la respuesta del usuario

 function subQuestionsHandler(sub) { // const hasId = data.child.some(({ id }) => sub.id === id) const id = sub.id const sub_question = sub.sub_question const weightage = sub.weightage // console.log(id, sub_question, weightage) const hasId = childData.find(({ id }) => sub.id === id) if (!hasId) { setChildData((childData) => childData.concat({ id: id, sub_question: sub_question, weightage: weightage })) } }

Entonces, ¿cómo puedo concatenar la matriz secundaria dentro de la matriz de datos? ?

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

0

Formación:

 let data = [ { id: 1, question: "...", children: [], }, { id: 2, question: "...", children: [ { id: 1, sub_question: "...", }, { id: 2, sub_question: "...", }, ], }, ];

Matriz concatenada:

 data = [...data]; data.push({ id: 3, question: "concatenated", children: [], });

Actualizar matriz:

 const datumIndexToUpdate = 0; data = [...data]; data[datumIndexToUpdate] = { ...data[datumIndexToUpdate] }; data[datumIndexToUpdate].question = "updated";

Sub-arreglo Concat:

 const datumIndexToUpdate = 0; data = [...data]; data[datumIndexToUpdate] = { ...data[datumIndexToUpdate] }; data[datumIndexToUpdate].children = [...data[datumIndexToUpdate].children]; data[datumIndexToUpdate].children.push({ id: 3, sub_question: "concatenated", });

Subarreglo de actualización:

 const datumIndexToUpdate = 0; const childIndexToUpdate = 0; data = [...data]; data[datumIndexToUpdate] = { ...data[datumIndexToUpdate] }; data[datumIndexToUpdate].children = [...data[datumIndexToUpdate].children]; data[datumIndexToUpdate].children[childIndexToUpdate] = { ...data[datumIndexToUpdate].children[childIndexToUpdate], }; data[datumIndexToUpdate].children[childIndexToUpdate].sub_question = "updated";
about 4 years ago · Juan Pablo Isaza Relatório

0

Así es como se concatena una matriz

 [1].concat([3]) === [1, 3]

Así es como se concatena una matriz anidada

 const nest1 = [[1]] const nest3 = [[3]] nest3[0].concat(nest1[0]) // === [[3, 1]]

Ahora sugiero simplificar su escenario y aplicarle esta lógica. O cambia el título de tu pregunta.

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