2014-10-04 57 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