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

Javascript 使用循环计算数组中新推送的数据,javascript,html,angularjs,loops,lodash,Javascript,Html,Angularjs,Loops,Lodash,我在正确计算循环中数组中的数值时遇到问题 场景 t正文生成动态值列表 td内部的按钮具有一个名为preBookThis()的函数,带有参数 当用户单击按钮时,它将触发功能,然后将数据推入数组变量 按下时,将出现一个循环,循环将迭代并计算值。($scope.nights是两个日期,即2018-05-05和2018-05-07,因此其值为2) 问题 让我们假设tbody中有三行,并且具有以下值 $scope.nights=2; 第1行=100; row2=200; row3=300 当用户单击

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

场景

  • t正文
    生成动态值列表
  • td
    内部的
    按钮
    具有一个名为
    preBookThis()的
    函数
    ,带有
    参数
  • 当用户单击
    按钮
    时,它将触发
    功能
    ,然后
    数据
    推入
    数组变量
  • 按下时,将出现一个循环,循环将迭代并计算值。(
    $scope.nights
    是两个日期,即2018-05-05和2018-05-07,因此其值为2)
问题

  • 让我们假设
    tbody
    中有三行,并且具有以下值

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

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

    amount\u row1=200

但是

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

    amount\u row1=400;
    金额2=400

而且

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

    amount\u row1=800;
    金额2=800;
    金额3=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>

仅在添加新对象时执行一次计算,而不循环所有已计算过的其他对象

比如:

$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
    });  
}

每当调用函数时,
$scope.bookData
都会发生完全更改,这就产生了问题

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

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

您正在重复更改
金额的值

试试这个:

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


实际上,另一个功能有一个更好的解决方案。

我无能为力,因为我对这个主题了解得不够。但我想推荐你一个非常详细和高质量的答案。我相信这会增加得到回答的机会。我非常感谢你的表扬。我希望有人能回答,因为我对此感到非常沮丧,无法解决它。该方法的最后一行是什么?此外,您似乎要乘以
$scope.nights
两次。我在最后一部分更新了我的代码,删除了可能会混淆其他人的不必要代码。谢谢,很好。我没想过。当然比我的想法要好:我没看到那个。干得真不错。现在,我唯一的问题是推送的所有数据的总金额。谢谢。你可以使用循环来获取总数,或者只是向现有的totalNice添加新的数量,让它同时工作。无论如何,我还有其他问题,但这和我发布的问题无关。这是一个相反的一个虽然,我会尝试解决它自己首先。谢谢。相反的意思是如何删除一个?如果是这样的话,这可能会帮助你真正感谢你的回答。但我相信charlietfl的答案是更好的。非常感谢。
_.forEach($scope.bookData, function(value, key){
    value.amount = (key+1) * $scope.nights*100;
});