javascript - 更改动态值时重复数组对象
问题描述
我制作了小型营销应用程序,用户可以在其中选择屏幕以在其上投放广告。接下来是流程,用户选择日期范围并从 API 获取所有可用展示次数的免费屏幕。用户选择屏幕并将它们添加到购物车。每个屏幕都有可用展示次数的数据。
这是购物车表
|ID | Available impressions (input) |
|1000 | 5000 |
|1004 | 7855 |
|1098 | 9688 |
|1111 | 1022 |
total: 23565 (input field)
这就像我期望的那样工作,这没关系,我将它发布到 API 并且一切正常。
代码:
<table>
<thead>
<tr>
<th>Id</th>
<th>Available impressions</th>
</tr>
</thead>
<tboda>
<tr ng-repeat="item in myCartItems | unique: 'id'">
<td>item.id</td>
<td><input type="number" ng-model="item.available_imp" ng-blur="sendCustomSelectedImpressions(item.id, item.available_imp)" ng-max="item.available_imp"</td>
</tr>
</tbody>
</table>
我将这些数据推送到数组
$scope.sendCustomSelectedImpressions = function(id, numberOfImpressions){
$scope.myCartItems.push({
'id': id,
'campaignImpressions': numberOfImpressions
});
}
问题 1
问题是,如果我们连续输入新值,在我们发送到 API 之前,再次输入新值,在我的 json 中我不仅仅得到新值,我得到之前输入的所有值,就像在下面的 JSON 中一样
{"campaign_items": [
{"id": 1000, "impressions": 5000},//duplicate, this is initial, i don't need this, i need new
{"id": 1004, "impressions": 7855},
{"id": 1098, "impressions": 9688},
{"id": 1111, "impressions": 1022},
{"id": 1000, "impressions": 6000}, //duplicate, when i try to input another number
{"id": 1000, "impressions": 4561}, //i only need this last i entered
]}
如何仅获取我在提交之前输入的输入,之前没有所有这些,没有重复???
问题 2
对于这个问题,我仍然没有任何代码,因为我需要这样做,但我需要一些逻辑帮助。
如果您查看表格示例,您会看到,我TOTAL
也有输入字段。加载 ng-table 时,我将所有展示次数相加并显示总数。没关系。每个屏幕都有不同的最大总数,例如,如果我在总数字段中输入另一个数字,而不是23565
输入较低的数字19000
,我需要均匀地添加到所有选定的屏幕。这里的问题是,一个ID 1111
只有1022
印象数的屏幕,一个ID 9688
有9688
印象数的屏幕。对我来说,解决方案是,计算初始sum
数字变化的百分比,当我得到结果时,每个屏幕印象减少相同的百分比。如果有人有其他解决方案,或者对代码有一些想法,请与我们分享。
再次感谢
解决方案
对于您的第一个问题,您可以在推送新数据之前删除具有该 ID 的对象。假设您可以使用该filter
功能(否则您需要循环)。这样,您将删除要在下一条push
语句中推送的 id。
$scope.sendCustomSelectedImpressions = function(id, numberOfImpressions){
$scope.myCartItems = $scope.myCartItems.filter(item => item.id !== id);
$scope.myCartItems.push({
'id': id,
'campaignImpressions': numberOfImpressions
});
}