Javascript concat和push会覆盖以前添加到对象中的内容
为什么要替换而不是添加到对象上 我也尝试过使用this.push而不是.concat,但同样的情况发生了,它覆盖了之前添加到对象中的内容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
$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文件的对象进行比较一样。