2016-04-21 10 views
0

で、オブジェクトに2つの等しい値の確認します同じであれば、それらのオブジェクトで何かをしてください。たとえば、arr [0]、arr [3]、arr [4]の開始日がすべてApr 4月2016 16:00:00 GMT-0700(太平洋夏時間)の場合、それらを選択する必要があります3オブジェクトとそれらで何かを行う。は、私はこのようになり、それに含まれるオブジェクトの配列を持つ配列

私はこれを行う方法がわかりません、どんな助けもありがとうございます。あなたは、オブジェクトのリストを変換することができ

for (var i = 0; i < array.length; i++) { 
    var currentObj = array[i]; 
    for (var j = i + 1; j < array.length; j++) { 
    var other = array[j]; 
    if (currentObj.start === other.start) { 
     // do stuff here 
    } 
    } 
} 
+2

あなたは、実際のオブジェクトを投稿することができますか?(オブジェクトのあなたの配列がarrayと呼ばれていると仮定した場合)Lodashを使用している場合あなたは何を試しましたか? – JordanHendrix

+0

フィルタを使用して配列の要素を正確に配列array.filter((e)=> {return e.start === "Apr 22 2016 16:00:00 GMT-0700(太平洋夏時間) "}); –

答えて

0

最初のループは、その時点から再びループ、開始のいずれかが同じであるかどうかを確認するには...によってマッピングされますそのstart属性をチェックし、それらの日付の中に複数のオブジェクトが含まれているかどうかを確認します。そして、あなたがする必要があるすべては彼らの開始日で特定されたオブジェクトのマップを取り戻すためのオブジェクトのリストと通話transformある

function transform(list) { 
    var map = {}; 
    for (var i = 0; i < list.length; i++) { 
    var object = list[i]; 
    if (object.start in map) { 
     map[object.start].push(object); 
    } else { 
     map[object.start] = []; 
     map[object.start].push(object); 
    } 
    } 
    return object; 
} 

はここにあなたのヘルパーです。それらを繰り返して、startの日付ごとにすべてのオブジェクトを取得します。

var startDates = transform(list); // your list of objects mapped by the start date 
// loop through each start date 
for (var startDate in startDates) { 
    var listForStartDate = startDates[startDate]; 

    // check to see if more than one object exists for this start date 
    if (listForStartDate.length > 1) { 
    // do whatever you want with your list of objects for the current start date 
    } 
} 
0

私は、最初のキー(数値のフォーマットされた文字列または文字列として)日付で、値が同じ日付を持つオブジェクトの配列であるオブジェクトを作成するためにLodashの_.groupBy()のようなものを使用します。

オブジェクトを反復処理し、値の配列に複数の要素がある場合は、その要素で何か処理を行います。

var grouped = _.groupBy(array, function (obj) { return '' + obj.start.getTime(); }); 
_.each(grouped, function (objects, date) { 
    if (objects.length > 1) { 
     doSomething(objects); 
    } 
}); 

Lodash /アンダーを使用していない場合、あなたは自分自身のグループ化機能をロールバックすることができます:

function groupBy(collection, callback) { 
    var output = {}; 
    angular.forEach(collection, function (obj) { 
     var groupKey = callback(obj); 
     if (!output[groupKey]) { 
      output[groupKey] = [obj]; 
     } else { 
      output[groupKey].push(obj); 
     } 
    }); 
    return output; 
} 

// to use it: 

var groupedByDate = groupBy(array, function (obj) { return '' + obj.start.getTime(); }); 
angular.forEach(groupedByDate, function (objects, date) { 
    if (objects.length > 1) { 
     doSomething(objects); 
    } 
}); 
関連する問題