2012-03-31 18 views
8

एक उदाहरण संग्रह (मॉडल दिखाने केवल):समूह संग्रह में Backbone.js में groupBy का उपयोग कैसे करें?

[ 
    { 
     name: "Bob" 
     date: "Thu Mar 29 2012" 
    }, 
    { 
     name: "James" 
     date: "Fri Mar 30 2012" 
    }, 
    { 
     name: "Dylan" 
     date: "Fri Mar 30 2012" 
    }, 
    { 
     name: "Stanley" 
     date: "Sat Mar 31 2012" 
    }, 
] 

कैसे मैं एक ही तारीख के साथ समूह मॉडल के लिए Underscore.js 'GroupBy फ़ंक्शन का उपयोग कर सकते हैं?

+1

आप 'से पहले की तारीख के लिए अल्पविराम भूल गया:' – ThiefMaster

उत्तर

5

उपयोग _.groupBy(data, 'date');

आप कस्टम समारोह पारित इस्तेमाल कर सकते हैं, लेकिन इस मामले में यह आवश्यक के रूप में विशेषता शॉर्टकट वाक्य रचना के ऊपर ठीक काम करता है नहीं है।

_.groupBy(data, function(row) { 
    return row.date; 
}); 

डेमो:

> _.groupBy(data, 'date') 
{ 'Thu Mar 29 2012': [ { name: 'Bob', date: 'Thu Mar 29 2012' } ], 
    'Fri Mar 30 2012': 
    [ { name: 'James', date: 'Fri Mar 30 2012' }, 
    { name: 'Dylan', date: 'Fri Mar 30 2012' } ], 
    'Sat Mar 31 2012': [ { name: 'Stanley', date: 'Sat Mar 31 2012' } ] } 
> _.groupBy(data, function(row) { return row.date }); 
{ 'Thu Mar 29 2012': [ { name: 'Bob', date: 'Thu Mar 29 2012' } ], 
    'Fri Mar 30 2012': 
    [ { name: 'James', date: 'Fri Mar 30 2012' }, 
    { name: 'Dylan', date: 'Fri Mar 30 2012' } ], 
    'Sat Mar 31 2012': [ { name: 'Stanley', date: 'Sat Mar 31 2012' } ] } 
> 
+2

वहाँ दृश्य सेट अप करने के लिए एक रास्ता है प्रत्येक समूह के लिए और उन विचारों को स्वचालित रूप से समन्वयित रखें क्योंकि एक मॉडल एक समूह से दूसरे समूह में चलता है? उदाहरण के लिए, यदि मैं किसी मॉडल पर दिनांक बदलता हूं, तो इसे किसी अन्य समूह में ले जाया जाना चाहिए और विचारों को तदनुसार अपडेट करना होगा। इस अर्द्ध स्वचालित रूप से करने के लिए कोई तरीका (शायद मैरियनेट का उपयोग कर) या क्या मुझे इसे मैन्युअल रूप से करना होगा? – ragulka

+3

यह वास्तविक रीढ़ की हड्डी संग्रह के लिए काम नहीं करता है, बुलफ्रॉग द्वारा उत्तर सही है। –

10

ThiefMaster जवाब पूरी तरह से वैध है, लेकिन यह मुझे थोड़ा भ्रम उत्पन्न क्योंकि मैं एक backbone.js संग्रह के लिए एक समाधान खोज रहा था के रूप में शीर्षक इंगित करता है।

सवाल वस्तु एक रीढ़ संग्रह हमने समूह में निम्नलिखित दिनांक के आधार पर मॉडल क्या करना चाहिए है:

_.groupBy(collection.models, function(model){ 
    return model.get('date') 
}); 

मुझे आशा है कि यह मदद करता है

+0

यह पूछे गए प्रश्न का वास्तविक उत्तर भी है। – dcarson

4
var groups =collection.groupBy(function(model) { return model.get('date'); }); 

//iterate over groups 
for(date in groups) { 
    var models = groups[date]; 
    console.log('date: '+date); 
    for (var model_idx in models) { 
     console.log(' name: '+ models[model_idx].get('name')); 
    } 
} 
47

आप एक वास्तविक रीढ़ संग्रह समूहीकरण रहे हैं आप रीढ़ की हड्डी विधि समूह का उपयोग कर सकते हैं जो अंतर्निहित अंडरस्कोर _.group कार्यक्षमता द्वारा उपयोग करता है। यह मेरी राय में एक बहुत साफ दृष्टिकोण है।

collection.groupBy(function(model){ 
    return model.get('date'); 
}); 
+1

यह पूछे गए प्रश्न का वास्तविक उत्तर है। – dcarson

+0

यह वह उत्तर है जो रीढ़ की हड्डी का उपयोग करके समूहबद्ध करने का वर्णन करता है। उपरोक्त उत्तरों अंडरस्कोर –

+8

का उपयोग कर समूह में गर्म वर्णन करते हैं आप शॉर्टंड का भी उपयोग कर सकते हैं: collection.groupBy ('date') – fadomire

0

अंडरस्कोर के बजाय Lodash का उपयोग करने वालों, तुम _.method() एक्सेसर का उपयोग कर एक ही परिणाम प्राप्त कर सकते हैं के लिए,

collection.groupBy(_.method('get', 'date')); 
संबंधित मुद्दे