我有一个带有约540条记录的observableArray
在记录中它有一个广告属性和一个日期属性我想做一个功能,找到特定日期的所有广告并计算记录数量,例如
日期= 23/02/2015
总计(31)
答案 0 :(得分:0)
这应该可以帮助你相处,但基本上你可以拥有一个迭代对象的函数并创建一个计数数组:
self.counts = ko.observable();
function updateCounts() {
var leads = self.leads(),
counts = {};
for (var i = 0, j = leads.length; i < j; i++) {
var prop = leads[i].date_enquired();
if (counts[prop] == null) {
counts[prop] = {
name : prop,
count : 1
};
}
else {
counts[prop].count++;
}
}
// set it as an array instead of an object
self.counts(Object.keys(counts).map(function (key) { return counts[key]; }));
}
在开始时和列表更新时运行此函数:
updateCounts();
self.leads.subscribe(updateCounts);
然后以您想要的任何方式在视图中显示对象:
<div data-bind="foreach: counts">
<div data-bind="text: name + ': ' + count"></div>
</div>
您还可以创建自己的对象来处理推送到数组并更新计数列表。这样,每次添加或删除项目时,添加都是O(1)
而不是O(n)
。总的来说,它不是太大的交易,因为迭代500多个项目真的很快。