计算选定的表值(淘汰赛,Javascript)

Posted

技术标签:

【中文标题】计算选定的表值(淘汰赛,Javascript)【英文标题】:Calculate selected table values (knockout, Javascript) 【发布时间】:2014-05-04 13:47:07 【问题描述】:

寻求一些建议。

我正在尝试创建一个带有淘汰赛的动态表(这很棒,但我只是第一步)。 该表有效,但我仍然遇到一些问题: 1.(更新:已删除) 2. self.ave 返回 NaN,而不是选定风险的计算平均权重;

self.ave = ko.computed(function () 
    var total = 0;
    for (var i = 0; i < self.risks().length; i++) 
        total += self.risks()[i].weight;
    
    return total/self.risks().length;
);

更新:似乎每次我添加新风险时,它的权重都是 0。所有风险的总和计算为 1(违约风险的权重)+ 0(任何新风险的权重)+ 0 +n...

update2:仍在寻求帮助 http://jsfiddle.net/Skaidrius/52xdL/

【问题讨论】:

仍然不知道如何计算某些活动的选定风险的总权重和平均权重。 【参考方案1】:

有一些小错误。

    对于第一个问题-availableRisks 不应该是常见的,它应该附加到 Activity。

    var Activity = function (title) 
     var self = this;
     self.title = ko.observable(title);
     self.availableRisks = ko.observableArray([
       name: "Low",
       weight: 1
     , 
      name: "Medium",
      weight: 2
     , 
      name: "High",
      weight: 3
     ]);
    ;
    

2- self.risks()[i].weight 是可观察的,所以用括号访问它。

self.ave = ko.computed(function () 
    var total = 0;

    for (var i = 0; i < self.risks().length; i++) 
        total += self.risks()[i].weight();
    
   return total/self.risks().length || 0;
);

更改可用风险视图中的绑定

<!-- ko foreach:risks -->
        <td>
            <select class="form-control input-sm" data-bind="options: $parent.availableRisks, value: risks.weight, optionsText: 'name'"></select>
        </td>
        <!-- /ko -->

Fiddle Demo

【讨论】:

非常感谢。 self.ave 仍然不计算平均重量,但它现在比以前好得多。另外,您是否介意解释一下为什么有必要将 availableRisks 添加到 Activity 而不是 Risk 类。 因为每行的availablerisk是不同的,所以如果将其共享,那么您将获得相同的值。还有另一种方法,您可以在 Activity 中使用 self.risks 而不是 availableRisk。两者都可以工作

以上是关于计算选定的表值(淘汰赛,Javascript)的主要内容,如果未能解决你的问题,请参考以下文章

表值函数

淘汰JS过滤

ORACLE PL/SQL 中的表值函数

涉及运算的表值参数问题

不使用存储过程的表值参数

sqlserver中的表值函数和标量值函数