2016-01-12 34 views
0

我正在構建一個相對簡單的測驗,已經建立了所有的標記和表單邏輯,現在提交我得到一組答案A/B/C/D),我需要將其與各種標準組合進行比較比較測驗答案的陣列(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) 

我有一個關於如何通過和比較多維對象/數組的brainfart。我知道我需要一個for .. in循環,到.split('/')等。任何幫助表示讚賞。

編輯

如果它可以更容易,我可以構建的標準組合,像這樣:

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

你能解釋一下這裏發生了什麼嗎? 「結果」是針對不同問題的一系列答案嗎? 「標準」代表什麼? –

+0

不應該很難,但需要一些額外的細節。 A,B,C型如何發揮作用?你比較每個,只有一個,等?答案是「AND」還是「OR」?也就是說,如果標準是A/B/C,那麼「A」是真的還是三個都需要?如果後者,他們是否需要有序。將問題簡化爲更易於使用的基本功能,然後再增加複雜性,可能會獲得更好的幫助。 – SteveJ

+0

@AutumnLeonard我試圖在代碼塊之前解釋。 '/'表示分隔符,因爲結果可能會返回不同的答案,並且仍然符合條件。如果你看看我的編輯,我想我會更清楚地構建標準,儘管更詳細。所以在這種情況下,'結果'將符合'B型'的要求。 – elzi

回答

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; 
} 
+0

輝煌。謝謝!我對「組合」的格式進行編輯會使這更容易嗎? – elzi

+0

@elzi它可能會使它更具可讀性,但它的實現方式非常類似。它也可以使用2d數組作爲條件,而不是字符串數字索引 – JCOC611