2010-09-13 2 views
1

Я борюсь с множеством сложных операторов в javaScript и задаюсь вопросом, может ли кто-нибудь указать мне в правильном направлении.Javascript - несколько сложных операторов if

function findFlights() 
    { 
    var yourDestination = readTheDestination(); 
    var yourAirline = readTheAirline(); 
    var yourFare = readTheFare(); 


    if (yourDestination == 'Choose your destination') 
     { 
     displayMessage('<B>Please choose a destination city from the Destination menu and then click Find flights again.</B>'); 
     } 
    else 
     { 
     var destinationTime, destinationOperator, destinationFare; 
     var message = '<B>You asked about flights to ' + yourDestination + '</B><BR>' + ""; 

     for (var i=0; i < flightTimes.length; i++)      //flight destinations 
     { 
     if // statement            // IF flight: 
      ((flightDestinations[i] == yourDestination &&    // destination = selected destination & 
      yourAirline == 'Any airline' &&        // airline = any airline & 
      yourFare == 'Any price'))         // fare <= chosen fare 
      ||               // OR 
      (flightDestinations[i] == yourDestination &&    // destination = selected destination & 
      yourAirline == flightOperators[i] &&      // airline = chosen airline & 
      yourFare <= flightFares[i]))        // fare <= chosen fare 

      { 
      destinationTime = flightTimes[i]; 
      destinationOperator = flightOperators[i]; 
      destinationFare = flightFares[i]; 



      message += destinationTime + ' ' + destinationOperator + '. £' + destinationFare + '<BR>'; 
      displayMessage(message); 

      } 
     } 
     else if (flightDestinations[i] == yourDestination && 
       flightOperators[i] != yourAirline && 
       flightFares[i] != yourFare) 
      { 
      displayMessage('There are no flights to ' + yourDestination + ' with ' + yourAirline + '. Please select Any Airline and try again.'); 
      } 
     } 

Это то, что у меня есть, и это делает меня серым.

+7

Ух ... есть вопрос здесь? – helloandre

+0

Вы должны описать, что он должен делать. – Pointy

+0

Является ли вопрос значением 'if'? или есть ли лучший способ выполнить эту задачу, которую вы нам показали? – Jakub

ответ

0

Я не уверен, в чем вопрос, но вы должны использовать более последовательный отступ, а сложные if заявления определенно станут яснее.

Мои правила:

  • вкладки используют для отступа ваших строк кода по размаху (например, +1 вкладка в то время как в фигурные скобки, if заявления и т.д.)
  • не использовать вкладки для чего-то еще ; использование пространство для выравнивания, несколько пробелов, при необходимости (так, использование пространства для выстилает свои условия в if заявлении, если заявление охватывает несколько строк)
+0

его отступ мог быть перепутан с копирования и вставки, похоже, что есть форма отступы. На самом деле это не ответ. – Jakub

+0

Извините, мой вопрос в том, может у вас так много, если/или в заявлении. – amamam

+0

Im работает над вторым оператором If. Мне нужно, чтобы выбранный пункт назначения, выбранная авиакомпания и тариф были меньше или равны выбранной сумме, ее не устраивало то, что я добавил здесь. – amamam

0

Хотя я думаю, что это не является необходимой настройкой, вы можете написать код следующим образом:

if (yourDestination == 'Choose your destination') { 
    displayMessage('<B>Please choose a destination city from the Destination menu and then click Find flights again.</B>'); 
    return; 
} 

Это поможет вам удалить else и его кронштейны {...}.

Вы можете изменить цикл, чтобы уменьшить размер кода:

if(flightDestinations[i] != yourDestination) continue; 

Так что, вам не нужно писать это состояние неоднократно.

+0

может быть глупым, но, значит, разрыв означает, что сценарий остановится в этот момент, нам не сказали перерыв в уроках – amamam

+0

Нет, это не останавливается. Он просто переходит к следующему циклу, не выполняя код впоследствии. i увеличивается и продолжается. – Zafer

+0

Вы не имеете в виду 'continue'? – MooGoo

1

Вы несовпадающие свою скобку здесь:

((flightDestinations[i] == yourDestination &&    // destination = selected destination & 
yourAirline == 'Any airline' &&        // airline = any airline & 
yourFare == 'Any price'))         // fare <= chosen fare 
||               // OR 
(flightDestinations[i] == yourDestination &&    // destination = selected destination & 
yourAirline == flightOperators[i] &&      // airline = chosen airline & 
yourFare <= flightFares[i]))        // fare <= chosen fare 

Изменения yourFare == 'Any price')) в yourFare == 'Any price').

+0

Я знаю, что я изменил их на своем жестком диске, было проще для публикации, я также использовал вкладки для отступа, чтобы я мог видеть, куда должны идти утверждения. По-видимому, нас преподают с использованием очень старого стиля письма и не уверены, что это вызывает проблемы. – amamam

6

Refactor сложный код для работы

Если у вас есть комплекс, если заявления попытаться обернуть их в функции. Так

(flightDestinations[i] == yourDestination && 
yourAirline == 'Any airline' && 
yourFare == 'Any price') 

может стать

function YourDestinationIsTheSameForAnyAirlineOrPrice(flightDestination, yourDestination, yourAirline, yourFare){ 
    return flightDestination == yourDestination && 
     yourAirline == 'Any airline' && 
     yourFare == 'Any price'; 
} 

// And called from if 
if (YourDestinationIsTheSameForAnyAirlineOrPrice(flightDestinations[i], yourDestination, yourAirline, yourFare)) {} 

Вместо того, чтобы пытаться расшифровать, если заявление у вас есть имя функции, сообщающее, что она делает.

Используйте объект над нескольких массивами

Конкретного к вашему примеру я бы также попытаться создать единый объект полета, который содержит назначение, время и авиакомпанию. например:

var flight = { 
    destination = "London", 
    operator = "BA", 
    time = "18:00 UTC", 
    fare = "£239829" 
} 

Это должно сделать код более читаемым, чем использование нескольких массивов.Пример:

destinationTime = flightTimes[i]; 
destinationOperator = flightOperators[i]; 
destinationFare = flightFares[i]; 

message += destinationTime + ' ' + destinationOperator + '. £' + destinationFare + '<BR>'; 

// Using an object 
message += flight.Time + ' ' + flight.Operator + '. £' + flight.Fare + '<br />'; 

Возвращение рано

Наконец, я бы вырваться из функции как можно скорее. Поэтому использование:

if (yourDestination == 'Choose your destination') { 
    displayMessage('<B>Please choose a destination city from the Destination menu and then click Find flights again.</B>'); 
    return; 
} 

вместо того, если ... еще. Я лично считаю это более читаемым, поэтому не стесняйтесь игнорировать это.

+1

Мне жаль, что я не изучал это из другого источника, но мне нужно работать в пределах моих преподавателей, теперь я собрал несколько советов, чтобы изменить то, что я смотрю на это, пойдет с ними, спросит снова, если застрять дальше. спасибо – amamam

+0

Mate, вы забыли положить 'return' в начале функции' YourDestinationIsTheSameForAnyAirlineOrPrice', в противном случае это отличное решение. – Puiu

+0

Спасибо @Puiu. Хорошее место! :) – Castrohenge

Смежные вопросы