Crear matrices asociativas en JavaScript

Usando el siguiente código:

$cnetworkingits.getCnetworkingits = function() { return $(this).find( 'tbody' ).children( 'tr' ).map(function(){ var $name = $(this).children(':first').html(); var $role = $(this).children(':nth-child(2)').html(); return { $role: $name }; }).get(); } 

Que mira a través de los elementos de una list de créditos y debe devolver una list como la siguiente:

 [ { 'Make-up': 'Bob' }, { 'Make-up': 'Susan' }, { 'Photography': 'Charlie' }, { 'Lighting': 'Mike' }, { 'Props': 'One-handed Tony' } ] 

En última instancia, da salida a esto:

 [ { '$role': 'Bob' }, { '$role': 'Susan' }, { '$role': 'Charlie' }, { '$role': 'Mike' }, { '$role': 'One-handed Tony' } ] 

¿Cómo se soluciona la creación de matriz asociativa para get el resultado deseado?

Debes devolverlo de forma diferente si quieres un nombre dynamic, como este:

 $cnetworkingits.getCnetworkingits = function() { return $(this).find( 'tbody' ).children( 'tr' ).map(function(){ var $name = $(this).children(':first').html(), $role = $(this).children(':nth-child(2)').html(), result = {}; result[$role] = $name; return result; }).get(); } 

Puedes probar un ejemplo aquí (revisa la console). Esto es, bueno, solo la forma en que funciona la syntax literal del object. Dado que estos son equivalentes:

 object.propertyName object["propertyName"] 

Puede asignar a través de esa misma ruta.

Crea el object (matriz asociativa) en dos pasos:

 var obj = {}; obj[$role] = $name; return obj 

Siempre que utilice literales para crear un object ( {foo: bar} ), la key también se tomará literalmente y no se evaluará.

No hay matrices asociativas en JS. Simplemente cree un nuevo object y asigne como desee, por ejemplo:

 var $obj = {}; $obj.MakeUp = 'Bob';