2014-11-28 23 views
5

Bazı belirli özellik değerlerine sahip yinelenen nesneleri kaldırarak, bir dizi benzersiz nesne istiyorum. Örneğin: aşağıdaki kod snippet'inde, event1 ve event2 aynı başlığa ve aynı başlangıç ​​değerine sahiptir, event3 ve event4 aynı başlığa ama farklı başlangıç ​​zamanlarına sahiptir.jQuery belirli nesne özelliklerine göre benzersiz nesneler

Olay2'yi nesne dizisinden kaldırmak istiyorum (aynı başlığa sahip ve olay1 olarak başlangıç ​​değeri olarak) ancak event4 değil (yalnızca aynı ada sahip olduğu için).

Benim kod şuna benzer: başlık için sadece kontroller üzerinde

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"}] 

Kodum. İki farklı özellik için çalışmayı başaramadım. Yardım için şimdiden teşekkürler.

cevap

12

bu deneyin: dokümantasyon için

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) 
+0

Vay bakın !! Tam olarak ihtiyacım olan cevap. Yardım için teşekkürler @Furqan! – Lalu

+0

Bu utanç filtresi çalışmıyor Levitikon

2

, jQuery kullanarak:

$.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); 
    } 
}); 

demo

+0

Bir çekicilik gibi çalışır! Teşekkürler @dreyescat – Lalu

İlgili konular