knockoutjs 打破数组中的循环

Posted

技术标签:

【中文标题】knockoutjs 打破数组中的循环【英文标题】:knockoutjs breaking a loop in array 【发布时间】:2020-11-09 10:29:08 【问题描述】:

我正在尝试复制与此页面上显示的当前代码类似的代码: http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html

数组循环计算总价,但是,一旦满足特定条件,我就会尝试打破循环。

viewModel.total = ko.computed(function() 
    var total = 0;
    ko.utils.arrayForEach(this.items(), function(item) 
        var value = parseFloat(item.priceWithTax());
        if (!isNaN(value)) 
            total += value;
        
    );
    return total.toFixed(2);
, viewModel);

我想要实现的是,例如,如果 value 等于 2,则循环将停止,total.toFixed(2) 将等于 0。

我知道这可能是一个简单的问题,但我一直在到处寻找类似的问题,并且一直在努力寻找我正在寻找的东西。

我尝试创建与下面非常相似的东西,但这不起作用。

viewModel.total = ko.computed(function() 
    var total = 0;
    ko.utils.arrayForEach(this.items(), function(item) 
        var value = parseFloat(item.priceWithTax());
        if (!isNaN(value)) 
            total += value;
        
    );
    if (value == 2) 
        return total.toFixed(2) = 0;

    return total.toFixed(2);
, viewModel);

【问题讨论】:

非常感谢任何帮助 【参考方案1】:

这样的?

var viewModel = function() 
  var self = this;
  self.items = ko.observableArray([
    name: 'Item 1',
    priceWithTax: ko.observable(1.20)
  , 
    name: 'Item 2',
    priceWithTax: ko.observable(1.20)
  , 
    name: 'Item 3',
    priceWithTax: ko.observable(0.20)
  , 
    name: 'Item 4',
    priceWithTax: ko.observable(0.20)
  ]);

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

    ko.utils.arrayForEach(this.items(), function(item) 
      var value = parseFloat(item.priceWithTax());
      if (!isNaN(value)) 
        total += value;
      
    );
    
    if (total >= 2) 
      var returnValue = 0;
      return returnValue.toFixed(2);
    
    return total.toFixed(2);

  );


ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<table>
  <tbody data-bind="foreach: items">
    <tr>
      <td data-bind="text:name"></td>
      <td data-bind="text: priceWithTax"></td>
    </tr>
  </tbody>
  <tfooter>
    <tr>
      <th>Total</th>
      <th data-bind="text: total"></th>
    </tr>
  </tfooter>
</table>

【讨论】:

这个问题是它循环遍历每个产品的arrayForEach,所以一旦一个新产品通过数组,它会更新由于total += value;的值实际如果应该如果(value &gt;= 2),不是产品 如果产品数量少,那么它的性能差异会很小,尽管我同意它并不理想。这可能会有所帮助***.com/questions/2641347/…

以上是关于knockoutjs 打破数组中的循环的主要内容,如果未能解决你的问题,请参考以下文章

KnockoutJS 3.X API 第四章 数据绑定 控制流foreach绑定

KnockoutJS数组比较算法解析

Knockoutjs:如何使添加到列表中的输入值也可观察

如何打破 Java 中的嵌套循环?

在 Angular 2 中打破 NgFor 循环

打破R中的嵌套循环