2016-04-21 5 views
0

ich ein Array mit Objekten darin haben, die wie folgt aussieht:Prüfung auf zwei gleiche Werte in Objekten, die in einem Array

object

Ich muss überprüfen, um zu sehen, ob der start Daten sind die dasselbe, und wenn sie sind, tu etwas mit diesen Objekten. Wenn zum Beispiel arr [0], arr [3], arr [4] alle ein Startdatum von Mon 25. April 2016 16:00:00 GMT-0700 (Pacific Daylight Time) haben, muss ich diese auswählen 3 Objekte und mache etwas mit ihnen.

Ich bin nicht sicher, wie dies zu tun ist, jede Hilfe wird geschätzt.

+2

können Sie das eigentliche Objekt posten? und was hast du probiert? – JordanHendrix

+0

Sie können Filter verwenden, um das Element im Array mit einem genauen Datum zu extrahieren array.filter ((e) => {return e.start === "Mo Apr 25 2016 16:00:00 GMT-0700 (Pacific Daylight Time) "}); –

Antwort

0

erste Schleife durch das Array, dann wieder Schleife von diesem Punkt an, prüfen Sie, ob eine der beginnt gleich sind zu sehen ...

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

Sie Ihre Liste der Objekte verwandeln kann durch abgebildet werden ihr start Attribut und überprüfen Sie, ob einige dieser Daten mehr als ein Objekt enthalten.

Hier ist dein Helfer:

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; 
} 

Dann alles, was Sie tun müssen, um Anruf transform mit Ihrer Liste der Objekte Ihre Karte Objekte durch ihre Startdaten identifiziert zu kommen. Iterate durch sie und Sie erhalten alle Objekte für jede start Datum.

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

Ich würde zuerst _.groupBy() so etwas wie Lodash ist verwenden, um ein Objekt zu erstellen, wo der Schlüssel das Datum (als formatierten String oder String des numerischen Wertes) ist und der Wert ist ein Array von Objekten mit dem gleichen Datum.

Dann iterieren Sie über das Objekt und wenn das Werte-Array mehr als ein Element hat, machen Sie etwas damit.

z.B. bei Verwendung von Lodash (vorausgesetzt, Ihr Array von Objekten wird array genannt):

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

Wenn nicht Lodash/Unterstrichen verwenden, können Sie einfach Ihre eigene Gruppierungsfunktion rollen:

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); 
    } 
}); 
Verwandte Themen