2

だから、特定の「期間」でXMLファイルを解析するこのWebサーバーがあります。

期間は次のように表示されます (これは変更できません)。

00:05:00 00:09:15 01:13:15HH:MM:SS形式で。

_.filter()たとえば00:00:00との間の日付を持つすべてのオブジェクトを選択してから、と00:10:00の間のすべてのオブジェクトでフィルターを実行したいと考えています。00:10:0000:20:00

編集(明確化):期間は「視聴回数」です。00:00:00 から 1:30:00 までの期間のエントリが 50 あるとしますが、新しいリストを作成したいとします。

  • 期間
  • その期間の平均「視聴時間」。

つまり、「0 分から 10 分の範囲のすべての期間を選択してください。それらのリストをください。平均を計算します。

そのためには、算術演算を行う可能性が必要です。

  • 日付を比較する
  • 反復ごとに 10 分追加します

ただし、JavascriptDateオブジェクトは「ジャスト タイムズ」をうまく処理していないようですmoment.js。ライブラリもそうではありません。どうすればこれに行きますか?

4

2 に答える 2

0

JSで行う方法は次のとおりです。

times=['00:05:00', '00:09:15', '01:13:15'];
  1. 最初に秒を取得します

    function getsec(time){
      arr=time.split(':');
      return (+arr[0])*3600 + (+arr[1])*60 + (+arr[2]);
    }
    
    times.map(getsec)
    [ 300, 555, 4395 ]
    
  2. 次に、特定の期間のスロットに時間をフィルタリングします

    function filter(last, curr, index, array){
      chk=parseInt(curr/600); //slots for 10 minutes
      if (typeof last[chk] === 'undefined')
      {
        last[chk]=[];
        last[chk].push(curr);
      }
      else
        last[chk].push(curr);
      return(last)
    }
    
    times.map(getsec).reduce(filter,[]);
    [ [ 300, 555 ], , , , , , , [ 4395 ] ]
    

    配列の配列を返します。各子配列には、昇順でスロット内の時間が含まれています

  3. 平均を計算する

    function avg(last, curr, index, array){
      if(index==array.length-1)
      return (last+curr)/array.length;
      else
      return last+curr;
    }
    
    times.map(getsec).reduce(avg,0);
    1750
    
    function getavg(arr){
      return arr.reduce(avg,0);
    }
    
    times.map(getsec).reduce(filter,[]).map(getavg);
    [ 427.5, , , , , , , 4395 ]
    

    配列の配列を扱っているので、ラッパーが必要です。

最後に、エントリが多いと、データベースの方が高速になります。

于 2013-08-27T04:33:22.707 に答える
-1

最も簡単な方法は、すべてを秒に変換してから、自分のことを行うことです。

inSeconds = function(time) {
  var secs, arr = [];
  arr = time.split(':').map(function(item) { return parseInt(item) });
  secs = arr[0]*3600 + arr[1]*60 + arr[2];
  return secs;
}
于 2013-08-25T14:20:50.653 に答える