【问题标题】:Compute the newly pushed data in array using loop使用循环计算数组中新推送的数据
【发布时间】:2018-10-15 21:33:42
【问题描述】:

我无法正确计算循环内数组中的数值。

场景

  • tbody 生成动态值列表。
  • td 内部的button 有一个名为functionpreBookThis()params
  • 当用户点击button时,会触发function然后pushdata变成array variable
  • 推送时,将有一个for loop 将迭代和计算值。 $scope.nights 是两个日期 - 即 2018-05-05 和 2018-05-07,因此其值为 2)

问题

  • 假设tbody 中有三行,并且具有以下值。

    $scope.nights = 2; row1 = 100; row2 = 200; row3 = 300;

  • 当用户点击 第 1 行中的button,计算工作并按预期执行

    amount_row1 = 200;

但是……

  • 当用户点击第2行中的button时,第一行的计算值将加倍。

    amount_row1 = 400; amount_row2 = 400;

还有……

  • 当用户点击第3行中的button时,第一行和第二行的计算值将再次翻倍。

    amount_row1 = 800; amount_row2 = 800; amount_row3 = 600;

最终输出应该是:

 amount_row1 = 200;
 amount_row2 = 400;
 amount_row3 = 600;

HTML

<tbody ng-repeat="room in roomsDisplay">
    <tr>
        <td>
            <div class="col-md-6"><img ng-src="images/rooms/{{room.room_image}}"></div>         
        </td>
        <td>
            <div style="margin-top: 20px;"><input type="button" 
                ng-click="preBookthis({room})" class="btn btn-primary" 
                value="Book this Room"></div>
        </td>
    </tr>
</tbody>

JS

$scope.preBookthis = function(data){
    $scope.totalAmount = 0;
    $scope.bookData.push({ 
        'room_name': data.room.room_name, 
        'price': data.room.price,
        'amount': $scope.amount,
        'id' : data.room.rooms_type_id
    });

    _.forEach($scope.bookData, function(value, key){
        value.amount = value.amount * $scope.nights;
    });
}

【问题讨论】:

  • 我无能为力,因为我对这个主题了解得不够多。但我想赞扬你一个非常详细和高质量的答案。我相信这会增加得到答复的机会。
  • 非常感谢您的称赞。我希望有人能回答,因为我对此感到非常沮丧,无法解决。
  • 方法的最后一行是干什么用的?
  • 另外,您似乎乘以 $scope.nights 两次。
  • 我在最后部分更新了我的代码,删除了可能会混淆其他人的不必要的代码。谢谢。

标签: javascript html angularjs loops lodash


【解决方案1】:

在添加新对象时只进行一次计算,不要遍历已经计算过的所有其他对象

类似:

$scope.preBookthis = function(data){
    $scope.totalAmount = 0;
    $scope.bookData.push({ 
        'room_name': data.room.room_name, 
        'price': data.room.price,
        'amount': $scope.amount * $scope.nights,// calculate only for this item
        'id' : data.room.rooms_type_id
    });  
}

【讨论】:

  • 不错。没有考虑到这一点。当然比我的想法更好:D
  • 我没看到那个。真是好工作。现在,我唯一的问题是所有pushed 数据中的total_amount。谢谢。
  • 可以使用循环来获取总数或只是将新金额添加到现有总数中
  • 很好,两者都能正常工作。无论如何,我还有其他问题,但这与我发布的问题无关。虽然它与这个相反,但我会先尝试自己解决它。谢谢。
  • 反义词怎么去掉?如果是这样,这可能会有所帮助stackoverflow.com/questions/15453979/…
【解决方案2】:

问题源于 $scope.bookData 在函数被调用时被完全更改。

调用函数时,$scope.bookData 可能包含其他行的对象。这些对象具有amount 值。在您的循环中,将该值乘以 $scope.nights(即 2)。

因此,您将 所有 行的值乘以 2。

您反复更改amount 的值。

试试这个:

_.forEach($scope.bookData, function(value, key){
    value.amount = (key+1) * $scope.nights*100;
});

编辑:

其实,另一个answer 提供了更好的解决方案。

【讨论】:

  • 非常感谢您的回答。但我相信 charlietfl 的答案是更好的答案。谢谢。
猜你喜欢
  • 2016-05-18
  • 2021-06-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 2017-12-23
相关资源
最近更新 更多