我有一个创建的游戏,它将在我的 JSFiddle example 中添加数组missedArr
遗漏的问题,我有2个按钮(均设置为错误答案) 。单击这些按钮后,似乎已正确存储了两次单击,但是我想在游戏结束时显示一个读数,以向我的用户显示他们在哪些方面做得好与哪些方面做得不好。
为此,我创建了一个名为determineScorecard
的函数,该函数应用于创建missedArr
的字典,但是当它触发时,我将无法定义。
dSc
函数应该在html按钮上设置的data-category
上进行排序,然后我要进行console.log仅记录category-2
中遗漏的那些
function determineScorecard (){
//build dictionary for missed questions
var sortedMissed = {};
for( var i = 0, max = missedArr.length; i < max ; i++ ){
if( sortedMissed[missedArr[i].category] == undefined ){
sortedMissed[missedArr[i].category] = [];
}
sortedMissed[missedArr[i].category].push(missedArr[i]);
}
console.log(sortedMissed["2"]);
}
我似乎无法正确分解。
答案 0 :(得分:2)
我认为这是您想要做的:
var incorrect = [];
$('.answer').click(function(){
var data = $(this).data(),
correct = data.correct;
if(!data.correct){
incorrect.push(data);
determineScorecard();
}
});
function determineScorecard(){
var missed = {};
for(var i = 0, max = incorrect.length; i < max ; i++){
var question = incorrect[i];
if(!missed[question.category]){
missed[question.category] = [];
}
missed[question.category].push(question);
}
console.log(missed);
}
但是,我不知道它如何产生您所期望的结果。记分卡逻辑对我(使用提供的代码)而言是零意义。您可以张贴一个完整的示例问题,以便我们看到整个流程吗?
答案 1 :(得分:1)
也许您想要这样的东西?
var missedArr = [];
$('.answer').click(function(){
var da=$(this).data();
if (da.correct) return false;
missedArr.push(da);
determineScorecard();
});
function determineScorecard (){
var sortedMissed = {};
$.each(missedArr,(i,da)=>{
if( sortedMissed[da.category] === undefined ){
sortedMissed[da.category] = [];
}
sortedMissed[da.category].push(da);
})
console.log(JSON.stringify(sortedMissed));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button class="btn btn-danger answer" data-category="2" data-question="2" data-value="300" data-correct="false">Google</button>
<button class="btn btn-danger answer" data-category="3" data-question="2" data-value="300" data-correct="false">Full-circle reporting</button>
在我的解决方案中,我没有将整个button
DOM元素存储,而是仅将它们的data()
对象存储到sortedMissed
数组中,因为它们包含有关问题和按下按钮的所有信息。但是,如果您不喜欢它,请随时将其改回...
答案 2 :(得分:-1)
引用您的JSFiddle:missedArr数组包含DOM元素。要获取该元素的类别,值等,您需要访问该元素的数据集属性。
missedArr[i].category // doesn't exist
missedArr[i].dataset.category // should exist
已针对使用.data()方法的jQuery更新:
missedArr[i].data('category') // should exist
在$(this)之类的jQuery函数中包装'this'时,该元素成为jQuery对象,因此要使用.data()方法访问数据集,而不是像使用vanilla那样尝试直接访问属性JS:
// lines 22 - 24 of your JSFiddle
if( sortedMissed[missedArr[i].category] == undefined ){
sortedMissed[missedArr[i].category] = [];
}