आप अपनी खुद की groupBy
समारोह एंबर-डेटा डी एस ManyArray वस्तुओं के लिए अनुरूप लागू करने और इसके साथ _
का विस्तार कर सकते हैं:
_.emberArrayGroupBy = function(emberArray, val) {
var result = {}, key, value, i, l = emberArray.get('length'),
iterator = _.isFunction(val) ? val : function(obj) { return obj.get(val); };
for (i = 0; i < l; i++) {
value = emberArray.objectAt(i);
key = iterator(value, i);
(result[key] || (result[key] = [])).push(value);
}
return result;
};
अब आप
var grouped = _.emberArrayGroupBy(activities, function(activity) {
return activity.get('dateLabel');
});
या अधिक बस
कॉल कर सकते हैं
var grouped = _.emberArrayGroupBy(activities, 'dateLabel');
समारोह ऊपर अंडरस्कोर के मूल groupBy()
कार्यान्वयन, जो बहुत समान दिखता है पर आधारित है:
var activities = App.store.findMany(App.Activity, feed.mapProperty('id').uniq())
var grouped = _.groupBy(activities, function(activity){
return activity.get('dateLabel;')
}).bind(this);
मैं परीक्षण करने के लिए यह कैसे काम करता है इस कोड नहीं चला लेकिन विचार:
_.groupBy = function(obj, val) {
var result = {};
var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
each(obj, function(value, index) {
var key = iterator(value, index);
(result[key] || (result[key] = [])).push(value);
});
return result;
};
अंडरस्कोर 'गतिविधियों' सरणी में जो भी ऑब्जेक्ट्स के साथ काम करता है। यदि इन ऑब्जेक्ट्स को 'get()' विधि नहीं है तो अंडरस्कोर के पास इसके साथ कुछ लेना देना नहीं है। – Tomalak
मुझे लगता है कि समस्या यह है कि ये एम्बर-डेटा डीएस-मॉनएरे ऑब्जेक्ट्स हैं और _.group की तलाश में बहुत अलग हैं। – dagda1
'_.groupBy() 'के साथ इसका कोई लेना-देना नहीं है। यदि आप 'गतिविधियां [0] .get (' dateLabel ') 'कर सकते हैं, तो' groupBy() 'कॉलबैक में' गतिविधि.get (' dateLabel ') 'करने में भी सक्षम होंगे। – Tomalak