Object Math.max和indexof获取索引

时间:2014-10-04 19:52:57

标签: jquery object indexof howler.js

我有以下对象:

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

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

所以我尝试了indexOf

var thisone = longest.indexOf(longest ));

但它似乎没有逻辑......而且它不起作用......

我是在正确的轨道上吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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;