为什么无法匹配?

时间:2015-04-24 12:27:03

标签: javascript jquery

为什么它无法匹配?

  var d = $('#bstudylevel').val();  // Bachelor
  var g = $('#bfrench').val(); // Moedertaal
  var h = $('#bnederlands').val(); // Moedertaal

  switch(selected_language) { //NL
    case 'NL':
      if( ((d!=='Bachelor') || (d!=='Master') || (d!=='Doctoraat') ) && 
          ((g!=='Moedertaal') || (g!=='Zeer Goed') ) && 
          ((h!=='Moedertaal') || (h!=='Zeer Goed') )
      ) {
          console.log("You do not match the requirement: ", d, g, h);
          return false;
      }
      break;
    case 'FR':
      if( ((d!=='Bachelier') || (d!=='Master') || (d!=='Doctorat') ) && 
          ((g!=='Très bon')  || (g!=='Bon') ) && 
          ((h!=='Très bon')  || (h!=='Zeer Goed') )
      ) {
        console.log("You do not match the requirement: ", d, g, h);
        return false;
      }      
      break;
  }

  console.log('Expected output is this..., not above');

输出:

您不符合要求:Bachelor Moedertaal Moedertaal

3 个答案:

答案 0 :(得分:5)

因为在您的代码d中始终有一个值为true的值:

if (((d !== 'Bachelor') || (d !== 'Master') || (d !== 'Doctoraat')) && ((g !== 'Moedertaal') || (g !== 'Zeer Goed')) && ((h !== 'Moedertaal') || (h !== 'Zeer Goed')))

<强> e.g。

d !== 'Master' //true,
d !== 'Doctoraat' //true

一种解决方案可能是使用具有所有度数的数组,并使用Array.prototype.indexOf如下:

var d = 'Bachelor';
var g = 'Moedertaal';
var h = 'Moedertaal';
var degrees = ['Bachelor', 'Master', 'Doctoraat', 'Moedertaal', 'Zeer Goed', 'Moedertaal', 'Zeer Goed'];

case 'NL':
    //check if d meet the degrees requirements
    if (degrees.indexOf(d) !== -1) {
        console.log("You do not match the requirement: ", d, g, h);
        return false;
    }
break;

答案 1 :(得分:4)

在任何表达式中

((d!=='Bachelier') || (d!=='Master') || (d!=='Doctorat') )

考虑d只能有一个值。因此,无论d是什么,它都不等于其中一个字符串。它可能不是它们,也可能是其中之一,但它不会全部都是。

因此,始终的值为true

答案 2 :(得分:2)

不用担心,我们会帮助你。我在这里做了一个小提琴:https://jsfiddle.net/j9z8xyys/

var d = 'Bachelor';
var g = 'Moedertaal';
var h = 'Moedertaal';
selected_language = 'NL';
switch(selected_language) { //NL
    case 'NL':
        if( ((d!=='Bachelor') || (d!=='Master') || (d!=='Doctoraat') ) && 
        ((g!=='Moedertaal') || (g!=='Zeer Goed') ) && 
        ((h!=='Moedertaal') || (h!=='Zeer Goed') )) {
            console.log("A");
            return false;
        }
        break;
    case 'FR':
        if( ((d!=='Bachelier') || (d!=='Master') || (d!=='Doctorat') ) && 
        ((g!=='Très bon')  || (g!=='Bon') ) && 
        ((h!=='Très bon')  || (h!=='Zeer Goed'))) {
            console.log("B");
            return false;
        }      
        break;
    }
console.log("C");

它最终会因为符合条件而进入第一个控制台。该怎么办,也许是重写它的好主意。