您可以實現對燼數據DS-ManyArray對象自己groupBy
功能定製,並把它擴展_
:
_.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()
執行,這看起來非常相似:
_.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
我認爲問題在於這些是ember-data DS-ManyArray對象,與_.groupBy正在尋找的內容有很大不同。 – dagda1
'_.groupBy()'根本就沒有任何關係。如果您可以執行'activities [0] .get('dateLabel')',那麼也可以在'groupBy()'回調中執行'activity.get('dateLabel')'。 – Tomalak