【问题标题】:Object Math.max and indexof to get the index对象 Math.max 和 indexof 获取索引
【发布时间】:2014-10-04 19:52:57
【问题描述】:

我有以下对象:

var thisArray = {
   user1: sounduser1,
   user2: sounduser2
};

sounduser1sounduser2 是通过 howler.js 播放的音频文件(很棒的脚本!)

使用._duration 你会得到一个数字——音频的长度。

我想获得最长的音频,我确实做到了:

var audiogetlength = Object.keys( thisArray ).map(function ( key ) { 
                        return thisArray[key]._duration;
                     });
var longest = Math.max.apply( null, audiogetlength );

我想要的是最长音频文件的原始[key](或索引?):var longest

所以我尝试了indexOf

var thisone = longest.indexOf(longest ));

但这似乎不合逻辑……而且不起作用……

我走对了吗?

【问题讨论】:

    标签: jquery object indexof howler.js


    【解决方案1】:

    旧的 for 循环有什么问题?

    var keys = Object.keys( thisArray ),
        maxDuration = 0,
        maxKey;
    for( var i=keys.length; i--; ) {
      if( thisArray[ keys[i] ]._duration > maxDuration ) {
        maxKey = keys[i];
        maxDuration = thisArray[ keys[i] ]._duration;
      }
    }
    
    // maximum (longeste) length in maxDuration
    // respective key in maxKey
    

    【讨论】:

    • 我似乎没有从 maxDuration 中得到一个数字。 maxDuration 会是这两者中最长的吗?
    • @Joep 如果属性_duration 包含一个数字,这应该返回最大的一个。你确定那是一个数字?
    • 成功了,谢谢!丢失的 'ü' 使代码什么也不返回。我改变了答案。再次感谢!
    【解决方案2】:

    您可以获取密钥和长度,而不仅仅是从对象属性中获取长度。如果按长度降序对数组进行排序,则可以从第一项获取长度和键:

    var audiogetlength = Object.keys( thisArray ).map(function ( key ) {
      return { key: key, len: thisArray[key]._duration };
    });
    audiogetlength.sort(function(a, b){ return b.len - a.len; });
    var longest = audiogetlength[0].len;
    var key = audiogetlength[0].key;
    

    【讨论】:

    • 谢谢,我会努力的。它似乎还没有工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多