检查列表是否与其他列表完全匹配,除了在javascript中的顺序

时间:2015-12-14 23:57:30

标签: javascript arrays

在javascript中,如果我有一个列表,例如:

var list = "abcdefghijklmnopqrstuvwxyz".split("");

我想让用户输入一个猜测(假设上面的列表不只是26个字母和100个左右的字符串)
如果他们的猜测与列表中的10个或更多字符串完全匹配(不包括重复的条目),它将

alert("good job! you win"); 

注意:我想在不使用图书馆的情况下这样做(请不要问为什么)

2 个答案:

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