JQuery objets uniques basés sur des propriétés spécifiques de l'objet

Je veux un ensemble d'objets uniques, en supprimant des objets en double qui ont des valeurs de propriété spécifiques. Par exemple: dans l'extrait de code ci-dessous, event1 et event2 ont le même titre et la même valeur de début, event3 et event4 ont le même titre mais différents horaires de début.

Je souhaite éliminer event2 du tableau d'objet (car il possède le même titre et la valeur de départ que event1) mais pas event4 (car il n'a que le même titre).

Mon code ressemble à:

var event1 = {id: 1, title: 'ABC', start: '10'}; var event2 = {id: 2, title: 'ABC', start: '10'}; var event3 = {id: 3, title: 'DEF', start: '12'}; var event4 = {id: 4, title: 'DEF', start: '20'}; var a=[]; a.push(event1); a.push(event2); a.push(event3); a.push(event4); //I tried this, but this code checks for title only. var titles = []; var b = []; $.each(a, function(index, event) { if ($.inArray(event.title, titles) === -1) { titles.push(event.title); b.push(event); } }); console.log(b); //Gives output as [Object { id=1, title="ABC", start="10"}, Object { id=3, title="DEF", start="12"}] // The right output should be: [Object { id=1, title="ABC", start="10"}, Object { id=3, title="DEF", start="12"}, Object { id=3, title="DEF", start="20"}] 

Mon code ci-dessus ne vérifie que le titre. Je n'ai pas pu le faire fonctionner pour deux propriétés différentes. D'avance, merci pour votre aide.

Essaye ça:

 var event1 = {id: 1, title: 'ABC', start: '10'}; var event2 = {id: 2, title: 'ABC', start: '10'}; var event3 = {id: 3, title: 'DEF', start: '12'}; var event4 = {id: 4, title: 'DEF', start: '20'}; var events = [event1, event2, event3, event4]; var result = events.reduce(function(memo, e1){ var matches = memo.filter(function(e2){ return e1.title == e2.title && e1.start == e2.start }) if (matches.length == 0) memo.push(e1) return memo; }, []) console.log(result) 

Pour la documentation, en utilisant jQuery:

 $.each(a, function(index, event) { var events = $.grep(b, function (e) { return event.title === e.title && event.start === e.start; }); if (events.length === 0) { b.push(event); } }); 

Voir démo