数组中的拼接只能按一个顺序进行

Art*_*ter 2 javascript arrays string checkbox angularjs

我有一点问题.我有一个显示div的复选框.我可以从6个不同的复选框中选择,以选择我想要显示的div.

当检查复选框时,我显示div并发送到服务器检查的div名称.

 $scope.savesGraphUserDetail = [];
    $scope.addRemoveUserChart = function(checked, value) {
      if (checked) {
        $scope.savesGraphUserDetail.push(value);

        var config = { headers: { "Content-Type": "application/x-www-form-urlencoded", "X-HTTP-Method-Override": "PUT" } };
        var data = {graphsConfig: $scope.savesGraphUserDetail};

        $http
        .post(serviceBase + "blabla", data, config)
          .success(function(data, status, headers, config) {
          })
          .error(function(data, status, header, config) {
          });
      }else {
        var index = $scope.savesGraphUserDetail.indexOf(value);
        $scope.savesGraphUserDetail.splice(index);

        var config = { headers: { "Content-Type": "application/x-www-form-urlencoded", "X-HTTP-Method-Override": "PUT" } };
        var data = {graphsConfig: $scope.savesGraphUserDetail};

        $http
          .post(serviceBase + "blabla", data, config)
          .success(function(data, status, headers, config) {
          })
          .error(function(data, status, header, config) {
          });
      }
Run Code Online (Sandbox Code Playgroud)

这没关系,但是当我取消选中复选框时,我遇到了问题,因为如果我检查这个顺序,首先点击"A",第二个"C"和第三个"D",我就像这样推入我的数组

myArray = ["A", "C", "D"]
Run Code Online (Sandbox Code Playgroud)

如果我以相反的顺序取消选中,首先取消选中"D"

myArray = ["A", "C"]
Run Code Online (Sandbox Code Playgroud)

第二个取消选中"C"

myArray = ["A"]
Run Code Online (Sandbox Code Playgroud)

并持续"A"

myArray = []
Run Code Online (Sandbox Code Playgroud)

这是完美的,但如果我在取消选中复选框时更改顺序

myArray = ["A", "C", "D"]
Run Code Online (Sandbox Code Playgroud)

如果我首先取消选中"C",我的数组将删除"C"和"D",我得到了这个

myArray = ["A"]
Run Code Online (Sandbox Code Playgroud)

如果我首先取消选中"A",我的数组会删除"A","C"和"D",我会得到这个

myArray = []
Run Code Online (Sandbox Code Playgroud)

如何删除唯一未选中的项目?

Nin*_*olz 5

您需要指定deleteCountof Array#splice,因为不会删除以实际索引开头的所有元素.

参数

deleteCount 可选的

一个整数,指示要删除的旧数组元素的数量.如果deleteCount为0,则不删除任何元素.在这种情况下,您应该至少指定一个新元素.如果deleteCount大于从数组开始处剩余的元素数,start则将删除通过数组末尾的所有元素.

如果deleteCount省略,或者其值大于array.length - start,则将start删除以数组末尾的index on 开头的所有元素.

$scope.savesGraphUserDetail.splice(index, 1);
//                                        ^
Run Code Online (Sandbox Code Playgroud)