2017-01-23 20 views
1

私はMomentJSからのモーメントオブジェクトである異なるタイムスタンプを持つオブジェクトの配列を持っています。間隔によるJavascriptグループの配列

[ 
    { 
    "name": "A", 
    "eventDateTime": "2016-12-09 07:50:17", 
    }, 
    { 
    "name": "B", 
    "eventDateTime": "2016-12-09 06:50:17", 
    }, 
    { 
    "name": "C", 
    "eventDateTime": "2016-12-09 07:01:17", 
    } 
] 

は今、私は15分間隔で、その後、グループ最初にそれらを並べ替えることで、(これらのオブジェクトの通常より多くのがあります)何をする必要がありますか。

は、だから私は

[ 
    { 
    "name": "B", 
    "eventDateTime": "2016-12-09 06:50:17", 
    }, 
    { 
    "name": "C", 
    "eventDateTime": "2016-12-09 07:01:17", 
    }, 
    { 
    "name": "A", 
    "eventDateTime": "2016-12-09 07:50:17", 
    }] 

を取得する必要がありますソートそして、私は彼らが時間午前6時50分17秒で最初のオブジェクトから始まるグループにする必要があります。だから、これは私の最初のグループで、06:50:17と07:05:17の間にあるすべてのオブジェクトを追加するべきです。配列はソートされているので、1つのオブジェクトが07:05:17よりも古いものになるまで反復することができます。

すべてのことを実現するのは難しくありませんが、可能な限り効率的でなければなりません。多くの機能を持つLodash.jsを使用しています。私はgroupByメソッドを知っていますが、どのようにA)MomentJSを使用するのかは分かりませんし、B)その内部の関数を定義します。

あなたはいくつかのヒントを持っていますか?

答えて

0

var data = [{ 
 
    "name": "A", 
 
    "eventDateTime": "2016-12-09 07:50:17", 
 
}, { 
 
    "name": "B", 
 
    "eventDateTime": "2016-12-09 06:50:17", 
 
}, { 
 
    "name": "C", 
 
    "eventDateTime": "2016-12-09 07:01:17", 
 
}]; 
 
var sortedDate = _.sortBy(data, function(o) { 
 
    return o.eventDateTime; 
 
}); 
 

 
var groupTime = null; // new Date(new Date(sortedData[0].eventDateTime).getTime() + 15 * 60000); 
 
var groupedData = _.groupBy(sortedDate, function(d) { 
 
    // no need to do this if eventDateTime is already a Date object 
 
    var time = new Date(d.eventDateTime); 
 
    // you can remove this condition and initialize groupTime with [0].eventDateTime 
 
    if (!groupTime) groupTime = new Date(time.getTime() + 15 * 60000); 
 
    return time - groupTime <= 900000 ? groupTime : groupTime = time; 
 
}); 
 

 
// modify the groupedData keys however u want 
 
console.log(groupedData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.2.1/lodash.min.js"></script>

関連する問題