【问题标题】:Splice function isn't working拼接功能不起作用
【发布时间】:2017-12-13 23:52:35
【问题描述】:

这是我的问题。 我正在尝试从数组中删除一个对象,但拼接函数似乎会引发崩溃。

$http({
   method : "POST",
   url : "getDatesBasket",
   data:   {"mission":pos_id},
   async:false
}).then(function successCallback(response) {
    var rep = response['data'];
    var repSplit = rep.split(",");
    var posSplit = repSplit[0];
    var posTemp = posSplit.split(":")[1];
    for (kPos = 0; kPos < $scope.datePos.length; kPos++) {
        alert("BEFORE " +$scope.datePos[kPos].dateMax);
        if(posTemp==$scope.datePos[kPos].pos){
            alert('start suppression');
            datePos.splice(kpos,1);
            alert('end suppression');
        }
        alert("AFTER " +$scope.datePos[kPos].dateMax);
    }

运行此程序时,我看到警告框 BEFOREstart suppression 但不是end suppression,就像拼接函数让代码崩溃了。

编辑

这里是 datePos,它是一个像这样构建对象的数组 我执行 ajax 请求以获取一些数据,然后将这些数据推送到选项卡内。所以这是一个有两个key的对象,pos和data

  $http({
       method: "POST",
       url: "getDatesBasket",
       data: {
           "mission": pos_id
       },
       async: false
   }).then(function successCallback(response) {
           var rep = response['data'];
           var repSplit = rep.split(",");
           var posSplit = repSplit[0];
           var dateSplit = repSplit[1];
           var posTemp = posSplit.split(":")[1];
           var date = dateSplit.split(":")[1];
           var myPos = {
               pos: posTemp,
               dateMax: date
           };
           $scope.datePos.push(myPos);    

【问题讨论】:

  • 如果您没有看到start suppression 警报,那么您的if 条件未评估为true 检查控制台以查看任何错误。
  • 更改当前迭代的数组时可能会出现什么问题?

标签: javascript angularjs splice


【解决方案1】:

你必须拼接在你的作用域上定义的同一个数组。而且你在你的拼接中使用小写字母。它应该是kPos。所以你必须像这样拼接。

$scope.datePos.splice(kPos,1);

【讨论】:

  • 其实我只是测试了一下,还是不行。
  • 什么是 $scope.datePos?你能发布这个变量的代码吗?
  • 我在第一个帖子里加了
  • 当alert发生时,你的scope值是$scope.datePos[kPos].dateMax alert("BEFORE" +$scope.datePos[kPos].dateMax);
  • 你的 posTemp 没有在你的 js 的范围内定义,你在你的视图中引用它?
【解决方案2】:

实际上,您忘记了使用 $scope。 这是更新的代码..

for (kPos = 0; kPos < $scope.datePos.length; kPos++) {
    alert("BEFORE " +$scope.datePos[kPos].dateMax);
    if(posTemp==$scope.datePos[kPos].pos){
        alert('start suppression');
        $scope.datePos.splice(kpos,1);
        alert('end suppression');
    }
    alert("AFTER " +$scope.datePos[kPos].dateMax);
}

【讨论】:

  • 其实我只是测试了一下,还是不行
【解决方案3】:
for (kPos = $scope.datePos.length-1; kPos>=0; kPos--) {
alert("BEFORE " +$scope.datePos[kPos].dateMax);
if(posTemp==$scope.datePos[kPos].pos){
    alert('start suppression');
    $scope.datePos.splice(kpos,1);
    alert('end suppression');
}
alert("AFTER " +$scope.datePos[kPos].dateMax);
}

像上面那样试试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 2017-10-11
    • 2023-03-30
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    相关资源
    最近更新 更多