我有以下对象:
var thisArray = {
user1: sounduser1,
user2: sounduser2
};
sounduser1
和sounduser2
是通过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 ));
但它似乎没有逻辑......而且它不起作用......
我是在正确的轨道上吗?
答案 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;