Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

223
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda