javascript - 使用循环计算数组中新推送的数据

标签 javascript html angularjs loops lodash

我在正确计算循环内数组中的数值时遇到问题。

场景

  • tbody 生成一个动态值列表。
  • td 中的 button 有一个名为 preBookThis()functionparams.
  • 当用户点击按钮时,它会触发函数,然后将数据推送到一个数组变量.
  • 推送 后,将有一个for 循环 来迭代和计算值。 ($scope.nights 是两个日期 - 即 2018-05-05 和 2018-05-07,因此它的值为 2)

问题

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

    $scope.nights = 2; 第 1 行 = 100; 行 2 = 200; row3 = 300;

  • 当用户点击第 1 行中的按钮时,计算会按预期进行并执行

    amount_row1 = 200;

但是……

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

    amount_row1 = 400; amount_row2 = 400;

还有……

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

    amount_row1 = 800; 数量_行2 = 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.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
    });  
}

关于javascript - 使用循环计算数组中新推送的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50191140/

相关文章:

javascript - 同时向下滚动一个 div 和向上滚动一个?

javascript - 主干 View UI

java - 让 JQuery 作用于 GWT 动态添加的类名

html - 屏幕阅读器将 1965 年读取为 "one nine six five"

javascript - 第一次加载我的网页时图像的奇怪显示布局

javascript - Angular JS 编码的双引号不起作用

javascript - 引入 React 时 Webpack 无法正常工作

python - Django ImageField 未上传图像

angularjs - ng-repeat过滤器空值不显示

angularjs - Protractor 检查元素是否有效