在javascript中,如果我有一个列表,例如:
var list = "abcdefghijklmnopqrstuvwxyz".split("");
我想让用户输入一个猜测(假设上面的列表不只是26个字母和100个左右的字符串)
如果他们的猜测与列表中的10个或更多字符串完全匹配(不包括重复的条目),它将
alert("good job! you win");
注意:我想在不使用图书馆的情况下这样做(请不要问为什么)
答案 0 :(得分:1)
你可以试试这个(Vanila JavaScript):
function matchCount(needles, haystack) {
var uniqueItems, total = 0;
uniqueItems = needles.filter(function(value, index, self) {
return self.indexOf(value) === index;
});
for(i = 0; i < uniqueItems.length; i++) {
if(haystack.indexOf(uniqueItems[i]) !== -1) total++;
}
return total;
}
然后使用它:
var list = "abcdefghijklmnopqrstuvwxyz".split("");
var userData = ['a', 'b', 'b', 'c', 'd', 'e', 'f'];
var count = matchCount(userData, list);
if(count >= 10) {
// Contains...
alert("good job! you win");
}
答案 1 :(得分:1)
我会使用像underscore这样的库来处理这个问题。
var list = ['a','b','c','d','e'];
var input = _.uniq(['b','c','d']); //return only unique values
var min_correct = 3;
var max_wrong = 3;
var correct_answers = _.intersection(list, input); //contains all correct answers
var incorrect_answers = _.difference(input, list); //contains all incorrect answers
if ( (correct_answers.length >= min_correct) && (incorrect_answers.length <= max_wrong) ) {
alert ('good job! you win');
}