【问题标题】:Splice from array works only in one order来自数组的拼接仅按一种顺序工作
【发布时间】:2018-04-30 23:21:12
【问题描述】:

我有一个小问题。 我有一个显示 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) {
          });
      }

这没关系, 但是当我取消选中复选框时会出现问题,因为如果我按此顺序检查 首先单击“A”,第二个“C”和第三个“D”我像这样推入我的数组

myArray = ["A", "C", "D"]

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

myArray = ["A", "C"]

第二次取消选中“C”

myArray = ["A"]

最后一个“A”

myArray = []

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

myArray = ["A", "C", "D"]

如果我首先取消选中“C”,我的数组删除“C”和“D”,我明白了

myArray = ["A"]

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

myArray = []

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

【问题讨论】:

    标签: javascript arrays angularjs string checkbox


    【解决方案1】:

    你的问题是你调用.splice() method只有index,你需要将1作为第二个参数,这是要拼接的项目数,@ 987654328@可选参数。

    var index = $scope.savesGraphUserDetail.indexOf(value);
    $scope.savesGraphUserDetail.splice(index, 1);
    

    否则所有从起始索引开始到数组末尾的元素都将被删除,这就是为什么 "C""D" 在您的第二次尝试中被删除。

    文档:

    如果您查看 .splice() MDN specification,您会看到:

    【讨论】:

      【解决方案2】:

      您需要指定Array#splicedeleteCount,因为没有删除所有以实际索引开头的元素。

      参数

      deleteCount 可选

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

      如果deleteCount被省略,或者它的值大于array.length - start,那么所有以start索引开始到数组末尾的元素都将被删除。

      $scope.savesGraphUserDetail.splice(index, 1);
      //                                        ^
      

      【讨论】:

        猜你喜欢
        • 2020-07-31
        • 1970-01-01
        • 2023-02-08
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        • 2016-10-04
        • 1970-01-01
        • 2021-05-07
        相关资源
        最近更新 更多