计算淘汰赛js中observableArray中的重复项目
Count repeated items in an observableArray in knockout js
我有一个包含大约 540 条记录的 observableArray
在记录中它有一个广告 属性 和一个日期 属性 我想做一个函数来查找特定日期的所有广告并计算记录的数量例如
日期 = 23/02/2015
- 广告 1 (16)
- 广告 2 (5)
- 广告 3 (10)
总计 (31)
这应该可以帮助你相处,但基本上你可以有一个函数来遍历对象并创建一个计数数组:
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 多个项目真的很快。
我有一个包含大约 540 条记录的 observableArray
在记录中它有一个广告 属性 和一个日期 属性 我想做一个函数来查找特定日期的所有广告并计算记录的数量例如
日期 = 23/02/2015
- 广告 1 (16)
- 广告 2 (5)
- 广告 3 (10)
总计 (31)
这应该可以帮助你相处,但基本上你可以有一个函数来遍历对象并创建一个计数数组:
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 多个项目真的很快。