Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

229
Views
La mejor manera de cambiar el valor de una propiedad. Está dentro de una matriz de matrices de objetos.

Así que estoy tratando de cambiar el valor de seleccionado de lo que sea. El valor es lo contrario. Es para una casilla de verificación. No sé, tal vez me falte sueño, pero me está costando mucho tratar de resolver esto. Aquí está la estructura de datos. Es JSON con matrices que tienen objetos.

 [ [ { "module": "string", "selected": false, "name": "title", "points": [{ "category": "category1", "description": "desc1", "provided": "provided1" }, { "category": "category1", "description": "desc", "provided": "something" } ] }, { "module": "string", "selected": false, "name": "title_one", "points": [{ "category": "category1", "description": "desc1", "provided": "provided1" }, { "category": "category1", "description": "desc", "provided": "something" } ] }, ], [...], [...] ]

Mi intento más cercano pero es el formato incorrecto

 //checked value is the information of the checkbox and valuesArr is the entire array function toggleCheck(checkedValue, valuesArr) { return { value: valuesArr.map((module, i, ...values) => { return [ ...values, (values[i] = module.map((x, j, ...transObj) => ({ ...transObj, selected: x.name === checkedValue.name ? !values[i][j].selected : values[i][j].selected, }))), ]; }), }; }

^^^ Esa estructura anterior lo hizo así que es

 [ [ [ {}, {}, {} ], [...], [...] ] ]

Necesito

 [ [ {}, {}, {} ], [...], [...] ]
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

No estoy seguro de si eso es lo que realmente necesita, pero puede usar el método plano para poner todo el json en una sola matriz.

Puedes usarlo así:

 const data = yourArray.flat()

Y puede iterar la const de datos de una manera más fácil.

Consulte este documento para saber más sobre el método plano:

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

about 4 years ago · Juan Pablo Isaza Report

0

Su toggleCheck es bastante difícil de leer, por lo que no puedo decir por qué no funciona de la manera esperada. Una forma más limpia de hacer esto puede ser:

 function toggleCheck(checkedValue, data) { return data.map( arr => arr.map( obj => { if (obj.name == checkedValue.name) { obj.selected = !obj.selected } }) ) }

Tenga en cuenta que esto generará un objeto completamente nuevo. No es exactamente un problema, excepto si la matriz contendrá miles de objetos (¡quizás ni siquiera eso!). En su código original, parece que intenta usar índices, no sé si la intención es modificar el objeto original, en ese caso, puede usar forEach en lugar de map :

 function toggleCheck(checkedValue, data) { data.forEach( arr => arr.forEach( (obj, i) => { if (obj.name == checkedValue.name) { arr[i].selected = !arr[i].selected } }) ) }

No necesita indexar la primera matriz, indexar la segunda es suficiente para obtener la referencia del objeto y modificar el valor como se esperaba.

about 4 years ago · Juan Pablo Isaza Report

0

Sin conocer todos los requisitos que tiene para su código, solo me estoy enfocando en cómo eliminar el anidamiento no deseado de las matrices. También puede simplificar su código con esta solución. El siguiente paso sería decidir si desea que se copien los valores / qué tan profundo desea copiar la matriz y si la lógica de alternancia es realmente lo que está buscando.

 function toggleCheck(checkedValue, valuesArr) { let midArray = [...valuesArr]; return midArray.map( (module) => { return module.map( (values)=>{ return { ...values, selected: values.name === checkedValue.name ? !values.selected : values.selected } }) } ) }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!