Angularjs数组在拼接后更改引用

时间:2014-10-08 13:07:04

标签: arrays angularjs

我正在为我的项目使用angularjs并且它正常工作。今天我面临的问题很少但不同 所以只需要一些建议。 考虑代码:

$scope.deleteEmpty = function(){

    for(var sp=0;sp < $scope.column.length;sp++){

        var offerings = $scope.column[sp];

        if(offerings.spName == -1){

            $scope.removeanswer(sp);                        
        }
    }
},

$scope.removeanswer = function(position){

    for(var question=1;question<$scope.rows.length;question++){

        $scope.rows[question].answerlst.splice(position, 1);
    }
},

这里我根据产品位置删除answerlst,它被删除但是有一个问题。考虑一个例子:

$scope.column = [{'spName':'-1',spId:'1'},{'spName':'-1',spId:'2'},{'spName':'-1',spId:'3'},{'spName':'-1',spId:'4'}]

第一次调用$scope.removeanswer(sp);时,它会删除第一列的answerlst,但之后会更改answerlst的位置。所以它删除了第1和第3位,而不是整体。

请提出任何建议。 感谢。

1 个答案:

答案 0 :(得分:0)

如果有更多信息,可以改进以下解决方案。

我们的想法是将列索引存储在toRemove数组中,然后从每个问题的answerlst中一次删除它们。

$scope.deleteEmpty = function(){
    var toRemove = []; // column indexes to be removed

    for(var sp=0;sp < $scope.column.length;sp++){
        var offerings = $scope.column[sp];
        if(offerings.spName == -1){
            toRemove.push(sp);                        
        }
    }
    $scope.removeanswer(toRemove);
},

$scope.removeanswer = function(positions){
    for(var question=1;question<$scope.rows.length;question++){
        $scope.rows[question].answerlst = $scope.rows[question].answerlst.filter(function(value, index) {
          return positions.indexOf(index) < 0;
        });
    }
},