使用循环计算数组中新推送的数据
Posted
技术标签:
【中文标题】使用循环计算数组中新推送的数据【英文标题】:Compute the newly pushed data in array using loop 【发布时间】:2018-10-15 21:33:42 【问题描述】:我无法正确计算循环内数组中的数值。
场景
tbody
生成动态值列表。
td
内部的button
有一个名为function
的preBookThis()
和params
。
当用户点击button
时,会触发function
然后push
data
变成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
两次。
我在最后部分更新了我的代码,删除了可能会混淆其他人的不必要的代码。谢谢。
【参考方案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
。谢谢。
可以使用循环来获取总数或只是将新金额添加到现有总数中
很好,两者都能正常工作。无论如何,我还有其他问题,但这与我发布的问题无关。虽然它与这个相反,但我会先尝试自己解决它。谢谢。
反义词怎么去掉?如果是这样,这可能会有所帮助***.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 的答案是更好的答案。谢谢。以上是关于使用循环计算数组中新推送的数据的主要内容,如果未能解决你的问题,请参考以下文章