올바른 답을 확인하고 싶다면 배열을 비교하는 것 이상을 수행해야합니다. 그들이 실제로 목록에있을 때 "아니오"를 선택했다고 가정하십시오. 먼저, 배열에있는 항목에 키 필드를 넣으므로 제한되지 않습니다.여기에있는 Plunker
당신의 데이터는 아마 이런 식으로 뭔가 보일 것입니다 작업 :
$scope.words = [{
id: 11,
name: 'Okra'
}, {
id: 12,
name: 'Musa'
}, {
id: 4,
name: 'Sky'
}, {
id: 13,
name: 'India'
}, {
id: 14,
name: 'Rose'
}, {
id: 15,
name: 'Titanic'
}, {
id: 16,
name: 'Onion'
}, {
id: 6,
name: 'Germany'
}, {
id: 17,
name: 'Beer'
}, {
id: 18,
name: 'Run'
}, {
id: 2,
name: 'Garden'
}, {
id: 19,
name: 'Mountain'
}]
$scope.wordsPresent = [{
id: 1,
name:'King'
},
{
id: 2,
name: 'Garden'
}, {
id: 3,
name: 'America'
}, {
id: 4,
name: 'Sky'
}, {
id: 5,
name: 'Potato'
}, {
id: 6,
name: 'Germany'
}, {
id: 7,
name: 'Rose'
}, {
id: 8,
name: 'Whisky'
}, {
id: 9,
name: 'Mumbai'
}, {
id: 10,
name: 'Walk'
}]
가 그럼 난 대답 필드를 추가을 (당신이 당신의 데이터를 설정하거나 당신이 후 같은 난을 포함 할 수 있습니다 때 당신은 그것을 포함 할 수있다 이 :
setAnswers();
function setAnswers() {
angular.forEach($scope.wordsPresent, function (value, key) {
$scope.wordsPresent[key].answer = 'no';
});
angular.forEach($scope.words, function (value, key) {
$scope.words[key].answer = 'yes';
})
}
귀하의 HTML은 다음과 같이 수 :
<div ng-app="myModule" ng-controller="HomeCtrl">
<div align="center" style="margin-bottom:1cm;">
<div ng-repeat="word in wordsPresent | limitTo:limitTo">
<h4>{{word.name}}</h4>
<input type="radio" ng-model="word.answer" value="yes">
Yes
<br />
<input type="radio" ng-model="word.answer" value="no">
No
<br />
</div>
</div>
<div ng-show="showAnswers">
<span>Correct Answers: {{correct}}</span> <span>Incorrect Answers: {{wrong}}</span>
You selected:
<div ng-repeat="a in playerChoices">
<span>{{a.name}}</span> <span>{{a.answer}}</span>
</div>
</div>
<div align="center">
<button class="button button-dark" ng-click="pushToArray()">OK</button>
</div>
</div>
컨트롤러에서 :
$scope.pushToArray = function() {
$scope.correct = 0;
for (var i = 0; i < $scope.wordsPresent.length; i++) {
$scope.playerChoices.push($scope.wordsPresent[i]);
}
$scope.showAnswers = true;
$scope.correct = correctAnswers($scope.playerChoices, $scope.words);
}
function correctAnswers(checkerArray, targetArray) {
correct = 0;
wrong = 0;
for (var i = 0; i < checkerArray.length; i++) {
if (checkerArray[i].answer == 'yes') {
if (containsObject(checkerArray[i], targetArray) == true) {
correct = correct + 1;
}
}
else if (checkerArray[i].answer = 'no') {
if (containsObject(checkerArray[i], targetArray) == false) {
correct = correct + 1;
}
}
}
return correct;
}
function containsObject(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (list[i].id === obj.id) {
return true;
}
}
return false;
}
해피 코딩!
나는 당신이하려는 일에 대해 혼란스러워합니다. 표시하는 두 배열에는 일치 항목이 없으므로 비교하면 시간이 낭비됩니다. 또한, color.name은 무엇입니까? –
@RaniRadcliff 사실, "Sky", "Germany", "Rose"및 "Garden"은 모두 두 배열에 있습니다. 이것은 자바 스크립트 배열 교차점입니다 - 나는 이전의 검색 결과에 대한 의문이 이것에 대한 몇 가지 답변을 표시합니다. – Lex
모든 대답이 올바른지 확인 하시겠습니까? 또는 어떤 질문에 올바르게 대답했는지 알아야합니까? – ksav