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

142
Vistas
Cómo agregar una propiedad a mi objeto usando un mapa

Quiero agregar este atributo "visible" y cambiar mi matriz de "países", "el2" se está cambiando correctamente, pero mi matriz al final no es la esperada.

Los elementos ingresan a los condicionales y se agregan a la nueva propiedad, pero al final del ciclo, la matriz no sale como se esperaba.

 const countryVisible: any = ['EUA', 'CANADA'] const countries: any = [{name: 'EUA', id: '123'}, {name: 'CANADA', id: '321'}, {name: 'Italia', id: '322'}] countries.map((el2, index2) => { countryVisible.forEach((el, index) => { if (el2['name'] === el) { el2 = {...el2, visible: true} console.log(el2) // {name: 'EUA', id: '123', visible: true} and {name: 'CANADA', id: '321', visible: true} } else { el2 = {...el2, visible: false} console.log(el2) //{name: 'Italia', id: '322', visible: false} } }) }) console.log(countries)

producción:

 [ { "name": "EUA", "id": "123" }, { "name": "CANADA", "id": "321", "visible": false }, { "name": "Italia", "id": "322", "visible": false } ]

salida esperada:

 [ { "name": "EUA", "id": "123", "visible": true }, { "name": "CANADA", "id": "321", "visible": true }, { "name": "Italia", "id": "322", "visible": false } ]
about 4 years ago · Santiago Gelvez
3 Respuestas
Responde la pregunta

0

Hay problemas menores con su código; dos problemas (tal vez 3):

  • No tienes return el2; en el método del map
  • No vuelve a asignar el resultado a los countries y, por lo tanto,
  • La variable countries debe declararse con un let

Y luego, hay un problema importante:

  • Dado que está configurando el estado de visible en función de la matriz countryVisible en lugar de en función del objeto de país que se está considerando, un estado visible se puede configurar como false aunque se haya configurado como true la primera vez. P.ej. EUA se establecerá en false en el resultado final.
  • En otras palabras, en lugar de verificar y configurar cada objeto de país solo una vez, cada uno se verifica tantas veces como objetos de país haya.

 const countryVisible = ['EUA', 'CANADA']; let countries = [{name: 'EUA', id: '123'}, {name: 'CANADA', id: '321'}, {name: 'Italia', id: '322'}]; countries = countries.map((el2, index2) => { if( countryVisible.includes( el2['name'] ) ) { el2 = {...el2, visible: true};; } else { el2 = {...el2, visible: false};; } return el2; }); console.log(countries);

Un mejor enfoque:

Considere usar map y simplemente agregar la propiedad visible al elemento mapeado.

 const countryVisible = ['EUA', 'CANADA']; const countries = [{name: 'EUA', id: '123'}, {name: 'CANADA', id: '321'}, {name: 'Italia', id: '322'}]; const output = countries.map( ({name,id}) => ({name,id,visible:countryVisible.includes(name)}) ); console.log( output );

about 4 years ago · Santiago Gelvez Denunciar

0

Puede reemplazar forEach loop con el método .includes

 const countryVisible = ['EUA', 'CANADA']; const countries = [{name: 'EUA', id: '123'}, {name: 'CANADA', id: '321'}, {name: 'Italia', id: '322'}]; const result = countries.map((country) => ({ ...country, visible: countryVisible.includes(country.name), })); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Santiago Gelvez Denunciar

0

Puede usar esta sintaxis para asignar propiedades condicionales al objeto JS. (ES6)

 const a = { ...(someCondition && {b: 5}) }

O puede usar la función incorporada Javascript Object.defineProperty

 Object.defineProperty(obj, 'foo', { value: 1 })
about 4 years ago · Santiago Gelvez 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