2013-10-24 4 views
1

Я хотел бы несколько советов о том, как похудеть этот переключатель:Упрощая это JavaScript-переключатель

switch (lotUser | winningLot) { 
     case lotUser === winningLot[0]: 
     case lotUser === winningLot[1]: 
     case lotUser === winningLot[2]: 
     case lotUser === winningLot[3]: 
     case lotUser === winningLot[4]: 
     case lotUser === winningLot[5]: 
     case lotUser === winningLot[6]: 
     case lotUser === winningLot[7]: 
      console.log("You win!"); 
      break; 
     default: 
      console.log("You do not win!"); 
      break; 
    } 

Вместо

case lotUser === winningLot[0]: 

Я написал сценарий быть:

switch (lotUser | winnendLot) { 
    case lotUser === winnendLot[0|1|2|3|4|5|6|7]: 
     console.log("You win!"); 
     break; 
    default: 
     console.log("You do not win!"); 
     break; 
} 

Я просто не знаю, работает ли это так, как я хочу, чтобы он работал. Он должен проверить, является ли сгенерированный множитель равным одному из значений в массиве (winLot). Если lotUser равно одному или нескольким значениям в массиве winLot, он должен выводить «You win!». Может ли кто-нибудь подтвердить, что мой код содержит описание, которое я дал?

+0

Это не делает то, что вы хотите, чтобы это сделать. Первый скрипт ближе к правильному способу использования коммутатора. Это многословие, но это правильный путь. Кроме того, вы злоупотребляете символом '|'. Это поразряд или операция. Таким образом, вы фактически выполняете математику между операторами, не выбирая один или другой https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators. –

+4

Вы видите, что вы неправильно понимаете '| ' оператор. Это оператор _binary_ OR. Вы не будете нуждаться в этом в своем коде, если вы не знаете, что вы делаете. –

+0

@PatrickGunderson: Как бы вы предложили сделать его тонким и укусить размер? –

ответ

5

насчет Array.prototype.indexOf()?

if (winnedLot.indexOf(lotUser) !== -1) { 
    console.log("Won!"); 
} 
else { 
    console.log("Lost!"); 
} 

Он ищет массив для первого вхождения значения, хранящегося в lotUser и возвращает соответствующий индекс.

Поскольку вам не нужно учитывать вхождения, это должен быть лучший способ.


Если вы хотите, чтобы сосчитать их, использовать цикл:

var count = 0; 

for (var i=0, len=winnedLot.length; i<len; i++) { 
    if (winnedLot[i] === lotUser) { 
    count++; 
    } 
} 
+0

Читайте в indexOf(), и это совершенно ясно для меня! Спасибо, что ответили :) –

+0

В качестве дополнительного вопроса, что, если я хочу записать что-то конкретное в одну позицию массива? –

+0

@JohannBehrens Используйте второй код и просто вставьте 'console.log()' или все, что вам нравится в инструкции if. – ComFreek

2

Вы можете просто использовать indexOf:

if(winningLot.indexOf(lotUser) >= 0) { 
    ... 
} else { 
    ... 
} 
1

Ну для начала вы используете switch неправильно. Значение для сравнения идет в switch(...) частях, а также возможные значения перечислены каждый case ...:

Во всяком случае, в стороне, все, что вы хотите, чтобы проверить, если lotUser находится в winnendLot массиве. Легко:

// assuming supporting browser: 
if(winnendLot.indexOf(lotUser) > -1) console.log("You win!"); 

// full browser support: 
var winner = false, l = winnendLot.length, i; 
for(i=0; i<l; i++) { 
    if(winnendLot[i] === lotUser) { 
     winner = true; 
     break; 
    } 
} 
if(winner) console.log("You won!"); 
Смежные вопросы