从数组角度js中删除未经检查的值

Posted

技术标签:

【中文标题】从数组角度js中删除未经检查的值【英文标题】:Remove unchecked value from an array angular js 【发布时间】:2017-07-20 06:48:39 【问题描述】:

我是 Angular js 的新手。我有一个带表格的复选框。

<td><input type="checkbox" ng-if="report.attributes.message.length > 0" ng-bind="report.attributes.message" ng-click="getcheckedData(report.attributes.message)"> report.attributes.message </td>

这里,我有一个方法getcheckedData()。所以,在那个方法中

   var messages = [];

   $scope.getcheckedData = function(SelectedVal)      
       $("input:checkbox[type=checkbox]:checked").each(function() 
          if ($.inArray(SelectedVal , messages) === -1)
                messages.push(SelectedVal);
           
        );
         return messages;
  ;

我有一个全局声明的数组。所以,我想将选中的复选框表数据的值放入该数组。我能够在array 中获得该值。因此,当用户取消选中时,未选中的值也应该从 array 中删除。因此,当用户检查 then 时, 我已经给了一个按钮,我将所有检查的消息发送到后端。 因此,当我取消选中并按下按钮时,所有消息仍保留在数组中。

    $scope.sendAllMessages = function()       
      uploadService.SendMessagesToQueue(uploadService.currentFileName,$scope.documentType,messages)
     .then(function () 
        , function (error) 
         $scope.errorMessage = error.status + " : " + error.statusText;
         toastr.error($scope.errorMessage, 'Error : ' + error.status);
         if (error.status === 401) 
             loginService.authenticationError();
         
       )
       .finally(function () 

        );
     ;

对于按钮 -

<button type="submit" ng-click = "sendAllMessages()" class="button-size btn btn-primary">Send  </button>

那么,我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

你所做的并不是实现你所需要的角度

但是,如果您需要以与您相同的方式进行操作,那么您应该进行以下更改。

如果未选中,则应从数组中删除该值,使用messages.splice(index, 1);

这是你修改后的代码,没有 ng-model(不推荐)

var messages = [];

   $scope.getcheckedData = function(SelectedVal)      

          if ($.inArray(SelectedVal , messages) === -1)
                messages.push(SelectedVal);
           
           else
           
           var index = messages.indexOf(SelectedVal)
           messages.splice(index, 1);
           

         return messages;
  ;

要以角度方式实现,需要使用ng-model

这是一个使用 Angular 的示例

var app = angular.module('app', []);

function Ctrl($scope) 
   
    $scope.messages = 
      
    ;

    $scope.reports = [  "name": "Sport", "id": "50d5ad"  , "name": "General", "id": "678ffr"  ];
    
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-controller="Ctrl" ng-app="app">
    <span ng-repeat="report in reports">
      <label class="checkbox" for="report.id">
        <input type="checkbox" ng-model="messages[report.id]" name="group" id="report.id" />
        report.name
      </label>
    </span>
    <pre ng-bind="messages | json"></pre>    
</div>

【讨论】:

感谢您的帮助,实际上它对我不起作用。如果我选中然后添加数组,但如果我取消选中,那么它也保留在数组中。但是下次当我检查时,它会从 array.check 中删除并且取消检查是不正确的。 好的,让我帮你。首先,您要遵循哪种方式,以便我们可以相应地进行 我正在使用的第一个。 只是console.log(index),在您的索引线下方并检查您是否获得索引 所以,这里发生了什么,当我第一次检查然后它添加到数组中,当我取消选中同一行然后它仍然在数组中,但是当我再次检查然后它从大批。那个时候它显示索引 0。

以上是关于从数组角度js中删除未经检查的值的主要内容,如果未能解决你的问题,请参考以下文章

从数组中删除一个元素后如何检查

怎么在数组中修改一个元素

js中怎么把值放入数组中

js怎么从数组中删除指定值(不是指定位置)的元素?

如何使用角度 7 从对象数组中返回 userPass 的值?

PHP如何检查一个数组内是不是存在指定元素