Функция возврата ничего не возвращает - PullRequest
0 голосов
/ 22 ноября 2018

Я использую эту функцию в js (она должна возвращать специальную тему):

function getSubjectByNumber(subject_number) {

  var subject_name;

  if (subject_number === 0) {
    return subject_name = "Deutsch";
  }
  if (subject_number === 1) {
    return subject_name = "Englisch";
  }
  if (subject_number === 2) {
    return subject_name = "Latein";
  }
  if (subject_number === 3) {
    return subject_name = "Kunst";
  }
  if (subject_number === 4) {
    return subject_name = "Musik";
  }
  if (subject_number === 5) {
    return subject_name = "Instrument/G. (Additum)";
  }
  if (subject_number === 6) {
    return subject_name = "Französisch (spät.)";
  }
  if (subject_number === 7) {
    return subject_name = "Theater und Film";
  }
  ..//That goes a long time...
}

И я вызываю метод возврата с этой строкой кода:

var subject_name = getSubjectByNumber(subject);   

Но какЯ вижу, что ничего не возвращается (''), потому что var subject_name всегда остается пустым.Я надеюсь, что кто-нибудь может мне помочь.Заранее спасибо.
~ мб

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы используете оператор строгого равенства (===), который не выполняет преобразования типов для операндов.Если subject - это строка, это объясняет это, потому что "0" === 0 - это false.В этом сценарии вам нужно либо преобразовать subject в число (просто добавив к нему +, либо использовать ==, чтобы сделать равенство с проверкой преобразования.

Новся ваша логика if/then, а также проблема строк / чисел может быть устранена, если вы просто используете массив.

let subjects = ["Deutsch", "Englisch", "Latein", "Kunst", "Musik", "Instrument/G. (Additum)", "Französisch (spät.)", "Theater und Film"];

function getSubjectByNumber(subject_number) {
  return subjects[subject_number];
}

console.log(getSubjectByNumber(0));
console.log(getSubjectByNumber("0"));
console.log(getSubjectByNumber(6));
console.log(getSubjectByNumber(7));
0 голосов
/ 22 ноября 2018

Пожалуйста, рассмотрите массив.

Принуждение даже не требуется, поэтому просто сделайте следующее - так как вы можете видеть, что 0 и "0" работают одинаково

function getSubjectByNumber(subject_number) {
  return ["Deutsch","Englisch","..."][subject_number] || "not found";
}

console.log(
 0,   getSubjectByNumber(0),
 "0", getSubjectByNumber("0"),
 1, getSubjectByNumber(1),
 10, getSubjectByNumber(10) // not found
);
...