【问题标题】:Creating associative arrays in JavaScript在 JavaScript 中创建关联数组
【发布时间】:2011-03-17 13:55:36
【问题描述】:

使用以下代码:

$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' }
]

您如何补救关联数组的创建以获得所需的输出?

【问题讨论】:

    标签: javascript jquery associative-array


    【解决方案1】:

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

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

    每当您使用文字创建对象 ({foo: bar}) 时,键也将按字面意思获取,不会被计算。

    【讨论】:

    • 您的解决方案确实有效,但 Nick Craver 也稍微整理了代码 - 所以必须给他答案。
    • @Metalshark:当然,不管对你有什么帮助! :) (@Nick 在 JavaScript 方面真是太棒了;))
    【解决方案2】:

    如果您想要一个动态名称,则需要以不同的方式返回它,如下所示:

    $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(检查控制台)。这就是对象字面量语法的工作方式。因为它们是等价的:

    object.propertyName
    object["propertyName"]
    

    您可以通过同一条路线进行分配。

    【讨论】:

      【解决方案3】:

      JS 中没有关联数组。只需创建一个新对象并根据需要进行分配,例如:

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

      【讨论】:

      • 这对使用动态键的 OP 有何帮助?
      • 对,它需要 [] 运算符,但思路是一样的:先创建对象,然后再添加,抱歉重复发帖,但发帖之间的距离都只有几秒钟的距离跨度>
      猜你喜欢
      • 2017-08-02
      • 2016-11-15
      • 2015-02-14
      • 1970-01-01
      • 2010-09-25
      • 2015-11-15
      相关资源
      最近更新 更多