1

次のオブジェクトがあります。

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

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

しかし、それは論理的ではないようです…そしてうまくいきません…</p>

私は正しい軌道に乗っていますか?

4

2 に答える 2

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
于 2014-10-04T19:57:50.257 に答える
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;
于 2014-10-04T20:00:30.323 に答える