concat和push覆盖先前添加到对象中的内容

时间:2014-12-02 23:07:57

标签: javascript angularjs

为什么要替换而不是添加到对象上?

我也尝试使用this.push()代替.concat(),但完全相同的事情发生了,它会覆盖以前添加过的对象。

$scope.checkMatchinAnswer = function (required, ans, input) {
    $scope.correctAnswers = [];

    angular.forEach(required, function (value) {
        if (angular.equals(value.answer, ans) && angular.equals(value.id, qid)) {
            $scope.correctAnswers = $scope.correctAnswers.concat([{
                id: qid,
                answer: value.answer
            }]);
        }
    });
}

2 个答案:

答案 0 :(得分:0)

你似乎比这更复杂。

执行以下操作会设置一个新值,这不是您想要的。

$scope.correctAnswers = 

看起来你只想推出新的声明,所以这样做:

$scope.correctAnswers.push({
    id: qid,
    answer: value.answer
})

答案 1 :(得分:0)

我的问题是我每次打电话时都在创建一个新范围:

$scope.correctAnswers = [];

我需要在函数之外创建范围并传递之前添加的内容:

    $scope.checkMatchinAnswer = function(required, ans, input) {

       if(!input){ 
           $scope.correctAnswers = [];
       }

        angular.forEach(required, function (value) {
               console.log(angular.equals(value.answer, ans), angular.equals(value.id, qid));
             if(angular.equals(value.answer, ans) != false && angular.equals(value.id, qid) != false){
                    this.push({ id: qid, answer: value.answer });
             }
        }, $scope.correctAnswers);
        return $scope.correctAnswers;
    }

然后在外面我会使用这个条件:

if($scope.correctAnswers != []) {
    $scope.checkMatchinAnswer(content.required, ans, $scope.correctAnswers);
} else {
    $scope.correctAnswers = $scope.checkMatchinAnswer(content.required, ans);
}