Using the following code:
$credits.getCredits = 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();
}
Which looks through the elements of a credits list and should return a listing like the following:
[
{ 'Make-up': 'Bob' },
{ 'Make-up': 'Susan' },
{ 'Photography': 'Charlie' },
{ 'Lighting': 'Mike' },
{ 'Props': 'One-handed Tony' }
]
It ends up outputting this instead:
[
{ '$role': 'Bob' },
{ '$role': 'Susan' },
{ '$role': 'Charlie' },
{ '$role': 'Mike' },
{ '$role': 'One-handed Tony' }
]
How do you remedy the associative array creation to get the desired output?
Create the object (associative array) in two steps:
var obj = {};
obj[$role] = $name;
return obj
Whenever you use literals to create an object ( {foo: bar}
), the key will also be taken literally and will not be evaluated.
You need to return it a little differently if you want a dynamic name, like this:
$credits.getCredits = 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();
}
You can try an example here (check the console). This is, well, just the way object literal syntax works. Since these are equivalent:
object.propertyName
object["propertyName"]
You can assign via that same route.
There are no associative arrays in JS. Just create a new object and assign like you want, eg:
var $obj = {};
$obj.MakeUp = 'Bob';
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.