在JavaScript中创建关联数组

4
使用以下代码:
$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();
}

该函数遍历信用列表的元素,应该返回以下列表:

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

它最终输出的结果是这样的:
[
     { '$role': 'Bob' },
     { '$role': 'Susan' },
     { '$role': 'Charlie' },
     { '$role': 'Mike' },
     { '$role': 'One-handed Tony' }
]

你如何修正关联数组的创建以获得所需的输出?
3个回答

13

分两步创建对象(关联数组):

var obj = {};
obj[$role] = $name;
return obj
无论何时你使用字面量创建一个对象({foo: bar}),键也将被按字面意义进行解析,不会被计算。

你的解决方案确实有效,但是Nick Craver也对代码进行了一些整理 - 所以必须授予他答案。 - Metalshark
@Metalshark:当然,任何对你有帮助的都可以! :) (@Nick在JavaScript方面真是太棒了;)) - Felix Kling

10

如果您想要一个动态名称,那么需要以稍微不同的方式返回它,就像这样:

$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();
}

在这里可以尝试一个示例(请查看控制台)。这就是对象字面语法运作的方式。因为这些是等价的:

object.propertyName
object["propertyName"]

你可以通过同样的方式进行分配。


2
在JS中没有关联数组。只需创建一个新对象并按照您想要的方式进行赋值,例如:
var $obj = {};
$obj.MakeUp = 'Bob';

1
这如何帮助使用动态键的OP? - Felix Kling
对了,它需要使用 [] 运算符,但是思路相同:先创建对象,然后再添加。很抱歉发了两次帖子,但这些帖子都只相差几秒钟。 - Mene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接