2014-10-04 27 views
1

我有以下对象:(!伟大的脚本)对象Math.max和的indexOf获得指数

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

sounduser1sounduser2语音文件是通过howler.js发挥

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

我想获得最长的声音,这是我没有得到过:最长的AudioFile的

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

但它似乎并不符合逻辑...它不工作...

我在正确的轨道上吗?

回答

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 
+0

我似乎没有从maxDuration中得到一个数字。 maxDuration会是这两个中最长的吗? – Joep 2014-10-04 20:37:38

+0

@Joep如果属性'_duration'包含一个数字,则返回最大的数字。你确定这是一个数字? – Sirko 2014-10-04 20:40:14

+0

它的工作,谢谢!丢失的'ü'使得代码无法返回。我改变了答案。再次感谢! – Joep 2014-10-04 21:04:26

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; 
+0

谢谢,我会努力的。它似乎还没有工作。 – Joep 2014-10-04 20:38:30