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';