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()的
,带有函数
参数
- 当用户单击
时,它将触发按钮
,然后功能
将
推入数据
数组变量
- 按下时,将出现一个循环,循环将迭代并计算值。(
是两个日期,即2018-05-05和2018-05-07,因此其值为2)$scope.nights
- 让我们假设
中有三行,并且具有以下值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;
});