jQuery-获取对象数组,然后根据数据集进行排序

时间:2018-07-24 17:29:47

标签: javascript jquery arrays sorting dictionary

我有一个创建的游戏,它将在我的 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"]);    
}

我似乎无法正确分解。

3 个答案:

答案 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);    
}

DEMO

但是,我不知道它如何产生您所期望的结果。记分卡逻辑对我(使用提供的代码)而言是零意义。您可以张贴一个完整的示例问题,以便我们看到整个流程吗?

答案 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] = [];
    }