我正在构建一个相对简单的测验,建立了所有标记和表单逻辑,现在提交我得到一系列答案(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'],
},
答案 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;
}