将测验答案(A / B / C / D)数组与标准组合

时间:2016-01-12 22:35:17

标签: javascript jquery

我正在构建一个相对简单的测验,建立了所有标记和表单逻辑,现在提交我得到一系列答案(A / B / C / D),我需要与各种比较标准列表中的组合

这是标准的样子。为了增加复杂性,我试图将其设置为允许各种答案,由字符串中的/分隔符表示。下面是代码的简化表示,假设我在表单提交处理程序中工作,而results是我从无线电输入组中获取的表单数据。

var criteria = [
  {
    combination: ['B', 'B', 'A/B', 'C', 'A/B/C/D'],
    type: 'Type A'
  },
  {
    combination: ['B', 'A/B/C/D', 'A/B', 'A/B/D', 'A/B/C/D'],
    type: 'Type B'
  },
  {
    combination: ['D', 'A', 'C', 'A/B', 'A/B/C/D'],
    type: 'Type C'
  }
]

// this data comes back from form
var results = ['B', 'A', 'A', 'D', 'C'];



function compareResults(results, criteria) {

  $.each( results, function (i, answer) {

    // ?

  })
}


compareResults(results, criteria)

我有一个关于如何逐步完成并与多维对象/数组进行比较的大脑。我知道我需要一个for .. in循环,.split('/')等等。感谢任何帮助。

修改

如果它更容易,我可以像这样构建标准组合:

combination: {
  '1' : ['B'], 
  '2' : ['B'], 
  '3' : ['A','B'], 
  '4' : ['C'], 
  '5' : ['A','B','C','D'], 
},

1 个答案:

答案 0 :(得分:0)

不确定这是否是你想要的。我假设结果只能是一个(即标准是互斥的,或者它们的交集是空的)。

function compareResults(results, criteria) {
  for(var z = 0; z < criteria.length; z++){
      var cr = criteria[z];
      var matches = true;
      for(var k = 0; k < results.length; k++){
          var combinationItems = cr.combination[k].split("/"),
             item = results[k],
             itemMatches = false;

          for(var i = 0; i < combinationItems.length; i++){
              if(combinationItems[i] == item){
                itemMatches = true;
                break;
              }
          }

          if(!itemMatches){
              matches = false;
              break;
          }
      }

      if(matches) return cr.type;
  }

  return null;
}