Crear un objeto con nombres de propiedades dinámicas [duplicate]

2 minutos de lectura

Crear un objeto con nombres de propiedades dinamicas duplicate
azulRápido

Estoy tratando de hacer esto:

var KEYS = {} ;

KEYS.PHONE_TYPE = 'phone-type';
KEYS.AGENT_TYPE = 'agent-type';

var myAppConfig = {
    ...
    iconMap : { 
        KEYS.PHONE_TYPE : 'icon-phone', 
        KEYS.AGENT_TYPE : 'icon-headphones'
    };
    ...
};

Pero está fallando, con un mensaje: Expected ':' and instead saw '.'.

¿Cómo puedo inicializar un objeto utilizando nombres clave indirectos (no literales)?

Para ser claro, el resultado que quiero es:

{
    'phone-type' : 'icon-phone',
    'agent-type' : 'icon-headphones'
}

  • y ¿Usar una cadena concatenada (dinámica) como clave de objeto de JavaScript?

    – Félix Kling

    24 de julio de 2013 a las 11:27

  • y ¿Objeto dinámico literal en javascript?

    – Félix Kling

    24 de julio de 2013 a las 11:28

  • y ¿Es posible agregar propiedades con nombres dinámicos al objeto de JavaScript?

    – Félix Kling

    24 de julio de 2013 a las 11:28

  • ¡Supongo que entiendo tu punto! 🙂 Pero te aseguro que lo busqué antes!

    – azul rápido

    24 de julio de 2013 a las 11:34

Si está utilizando ES6 (o algo como Babel/browserify), puede escribirlo así:

iconMap : { 
    [KEYS.PHONE_TYPE] : 'icon-phone', 
    [KEYS.AGENT_TYPE] : 'icon-headphones'
};

Tendría que agregar esas propiedades por separado usando la notación de corchetes:

var myAppConfig = {
    ...
    iconMap : { }
    ...
};

myAppConfig.iconMap[ KEYS.PHONE_TYPE ] = 'icon-phone';
myAppConfig.iconMap[ KEYS.AGENT_TYPE ] = 'icon-headphones';

  • Gracias. Todavía me sorprende que javascript no tenga soporte incorporado para la inicialización de un objeto con nombres clave dinámicos. Python puede hacer esto para diccionarios, y es muy conveniente. Supongo que esto se debe al hecho de que las comillas son opcionales en las propiedades de JavaScript.

    – azul rápido

    24 de julio de 2013 a las 11:31


  • Supongo que JS abandonó esa posibilidad al permitir nombres de atributos sin comillas, Python evita esto al requerir nombres de atributos entre comillas.

    – Petruza

    19 de diciembre de 2014 a las 20:14

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad