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

时间:2017-11-17 08:30:53

标签: javascript arrays angularjs string checkbox

我有点问题。 我有一个显示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 = []

如何删除唯一未经检查的项目?

2 个答案:

答案 0 :(得分:5)

您需要指定Array#splice "error":{ "metadata":[ "error-class","org.apache.solr.common.SolrException", "root-error-class","org.apache.solr.common.SolrException"], "msg":"Can't determine a Sort Order (asc or desc) in sort spec 'if(eq(custom_s_doctor_location_key, \"advanced imaging center - lake ridge-landing\"),1,0) desc', pos=35", "code":400}}) ,因为不会删除所有以实际索引开头的元素。

  

参数

     

deleteCount 可选

     

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

     

如果省略start,或者其值大于deleteCount,则将删除通过数组末尾以array.length - start索引开头的所有元素。< / p>

start

答案 1 :(得分:1)

您的问题是,您只使用index拨打 .splice() method ,您需要将1指定为第二个参数,即项目数要拼接,deleteCount可选参数。

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

否则将删除以数组末尾的start index开头的所有元素,这就是为什么在第二次尝试中删除"C""D"的原因。

<强>文档

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

enter image description here