0

我有一个可观察的数组

var myArray = ko.observableArray([
      { name: "Jimmy", type: "Friend", Age: 30 },
      { name: "George", type: "Friend", Age: 40 },
      { name: "Zippy", type: "Enemy", Age: 20 }
    ]);

现在我希望我的输出为

朋友总年龄:70

吉米 30 乔治 40

敌人总年龄:20

活泼的 20

有一个类似的jsfiddle链接

4

1 回答 1

2

如果您想保持通用结构(不仅仅是直接为“FriendTotalAge”和“EnemyTotalAge”创建计算),那么您可以扩展distinct扩展以包含一个用于总计的属性。

例如,您可以传入要用作总计的属性的名称,并在扩展中添加一个部分,例如:

    if (totalProp) {
        for (key in propIndex) {
            if (propIndex.hasOwnProperty(key)) {
                propIndex[key].total = ko.computed(function() {
                    var total = 0;
                    ko.utils.arrayForEach(propIndex[key], function(item) {
                        total += parseInt(ko.utils.unwrapObservable(item[totalProp]), 10) || 0;
                    });  

                    return total;                        
                });
            }                    
        }
    }  

现在,您的索引可以是“类型”并包含“年龄”属性的计算总数。

在这里更新小提琴:http: //jsfiddle.net/rniemeyer/yrh5D/

于 2012-12-16T00:51:16.217 回答