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

251
Vistas
La mejor manera de cambiar el valor de una propiedad. Está dentro de un objeto de una matriz de objetos.

Estoy tratando de cambiar el valor de selected de lo que sea actualmente (verdadero o falso) al opuesto cuando un usuario hace clic en una casilla de verificación. Se supone que mi función toggleCheck devuelve todos los datos con el valor de selección alterado. Aquí está la estructura de datos. Es un objeto con arreglos que tienen objetos.

 { "ModuleName": [{ "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

 function toggleCheck(checkedValue, valuesArr) { return { value: Object.entries(valuesArr).map(([key, values], i) => values.map((x) => { return { ...x, selected: x.name === checkedValue.name ? !x.selected : x.selected, }; }) ), }; }

probablemente porque usé un mapa que lo envolvió en una matriz

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

^^^ Lo que tengo

 { "Name": [ {}, {}, {} ], "Name": [...], "Name": [...] }

^^^ Lo que necesito

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

function toggleCheck(checkedValue, valuesArr) { //Step 0: Change the value in the data let checked = Object.entries(valuesArr).map(([key, values], i) => values.map((x) => { return { ...x, selected: x.name === checkedValue.name ? !x.selected : x.selected, }; }) ); //Step 1: Group the modules into like arrays let grouped = checked .flat().reduce(function (r, a, i) { if (!i || r[r.length - 1][0].module !== a.module) { return r.concat([[a]]); } r[r.length - 1].push(a); return r; }, []); //Step 2: Assign the new object properties as the arrays. //The key being the module name. let newObj = {}; grouped.map((x, i) => { newObj[x[0].module] = x; }); return {value: newObj}; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

En tu pregunta escribiste:

 { "Name": [ {}, {}, {} ], "Name": [...], "Name": [...] }

^^^ Lo que necesito


esto no puede existir en el objeto JS. Solo se tendrá en cuenta la última asignación de la propiedad nombre, todas las anteriores son solo valores antiguos de esta propiedad

codificación:

 const data = { name:'aaa' , name:'bbb' , name:'ccc' }

es lo mismo que codificar

 const data = {} data.name = 'aaa' data.name = 'bbb' data.name = 'ccc'

prueba:

 const data = { name:'aaa' , name:'bbb' , name:'ccc' } console.log( data )
 .as-console-wrapper {max-height: 100% !important;top: 0;} .as-console-row::after {display: none !important;}

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