Arrays 在淘汰赛js中计算observableArray中的重复项目
我有一个有540张唱片的耳环 在记录中,它有一个广告属性和一个日期属性,我想做一个函数,查找特定日期的所有广告,并统计记录的数量,例如 日期=2015年2月23日Arrays 在淘汰赛js中计算observableArray中的重复项目,arrays,knockout.js,Arrays,Knockout.js,我有一个有540张唱片的耳环 在记录中,它有一个广告属性和一个日期属性,我想做一个函数,查找特定日期的所有广告,并统计记录的数量,例如 日期=2015年2月23日 广告1(16) 广告2(5) 广告3(10) Total(31)这应该有助于您相处,但基本上您可以使用一个函数来迭代对象并创建计数数组: self.counts = ko.observable(); function updateCounts() { var leads = self.leads(), cou
Total(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]; }));
}
然后在视图中以您喜欢的任何方式显示对象:
<div data-bind="foreach: counts">
<div data-bind="text: name + ': ' + count"></div>
</div>
您还可以创建自己的对象来处理推送到数组和更新计数列表的操作。这样,每次添加或删除项目时,添加的内容都是
O(1)
,而不是O(n)
。总的来说,这没什么大不了的,因为迭代500个项目真的很快。你能发布(摘录)你的viewmodel,让我们看看你的记录是什么样子吗?这将有助于精心设计答案,而不是非常笼统。这听起来不像是一个淘汰问题。下面是JSFIDLE
<div data-bind="foreach: counts">
<div data-bind="text: name + ': ' + count"></div>
</div>