Arrays 在淘汰赛js中计算observableArray中的重复项目

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

我有一个有540张唱片的耳环

在记录中,它有一个广告属性和一个日期属性,我想做一个函数,查找特定日期的所有广告,并统计记录的数量,例如

日期=2015年2月23日

  • 广告1(16)
  • 广告2(5)
  • 广告3(10)

  • 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>