首页 > 解决方案 > 更改动态值时重复数组对象

问题描述

我制作了小型营销应用程序,用户可以在其中选择屏幕以在其上投放广告。接下来是流程,用户选择日期范围并从 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 96889688印象数的屏幕。对我来说,解决方案是,计算初始sum数字变化的百分比,当我得到结果时,每个屏幕印象减少相同的百分比。如果有人有其他解决方案,或者对代码有一些想法,请与我们分享。

再次感谢

标签: javascriptangularjsjson

解决方案


对于您的第一个问题,您可以在推送新数据之前删除具有该 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
      });
}

推荐阅读