Javascript concat和push会覆盖以前添加到对象中的内容

Javascript concat和push会覆盖以前添加到对象中的内容,javascript,angularjs,Javascript,Angularjs,为什么要替换而不是添加到对象上 我也尝试过使用this.push而不是.concat,但同样的情况发生了,它覆盖了之前添加到对象中的内容 $scope.checkMatchinAnswer = function (required, ans, input) { $scope.correctAnswers = []; angular.forEach(required, function (value) { if (angular.equals(value.answ

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

我也尝试过使用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
            }]);
        }
    });
}

你似乎把事情弄得更复杂了

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

$scope.correctAnswers = 
看起来您只是想推送新vlaues,请执行以下操作:

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

我的问题是每次调用时都在创建一个新的作用域:

$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);
}

您尝试过$scope.correctAnswers.push.apply$scope.correctAnswers,[{…}]吗?.apply有什么不同吗?concat创建了一个新数组,push.apply将改变原始对象。请参阅:。我认为您需要指定在foreach循环中使用哪个上下文。我仍然需要它为每个.push或.concat创建一个新对象,就像我使用angular.equals将其与另一个我无法真正调整为第三方JSON文件的对象进行比较一样。