Как проверить, какое условие было истинным в операторе if, где важен порядок? - PullRequest
0 голосов
/ 16 февраля 2020

Я знаю, что на этот вопрос есть похожие вопросы, но у меня есть своего рода специфика c, поэтому мне нужен какой-то совет.

Я делаю игру в JS, в которой участвуют 4 гоночных дива, и линия фини sh -70vw (гонки справа налево). Они случайным образом увеличивают свою VW от 0 до 100 на 5-15 VW при нажатии кнопки. Прямо сейчас, что у меня есть в моем коде, чтобы проверить порядок победителей, это:

 if (this.state.winnersArr.length < 4) {

  if (
    changePlayerArr[0].speed <= -70 &&
    !this.state.winnersArr.includes(changePlayerArr[0].name)
  ) {
    this.state.winnersArr.push(changePlayerArr[0].name);
  }
  if (
    changePlayerArr[1].speed <= -70 &&
    !this.state.winnersArr.includes(changePlayerArr[1].name)
  ) {
    this.state.winnersArr.push(changePlayerArr[1].name);
  }
  if (
    changePlayerArr[2].speed <= -70 &&
    !this.state.winnersArr.includes(changePlayerArr[2].name)
  ) {
    this.state.winnersArr.push(changePlayerArr[2].name);
  }
  if (
    changePlayerArr[3].speed <= -70 &&
    !this.state.winnersArr.includes(changePlayerArr[3].name)
  ) {
    this.state.winnersArr.push(changePlayerArr[3].name);
  }
  return changePlayerArr;

Здесь у меня есть массив, который выдвигает div, который проходит -70vw, который является строкой fini sh. Однако, поскольку проверяет скорость div (changePlayerArr [0] .speed) go от первого div [0] до последнего div [3], если предположить, что последний div имеет значение -69vw, а первый - -65vw и кнопка включения щелкните по обоим элементам go до -70vw, первый div все равно останется первым, так как проверка if помещает его первым в массив-победитель.

Так что мне было интересно, могу ли я сделать что-то вроде этого:

if(div[0].speed <= -70 || div[1].speed <= -70 || div[2].speed <= -70 || div[3].speed <= -70) 
 { // Check which statement was true in order and push to array}

Но в этом случае проверки по-прежнему go слева направо, так что я думаю, что это тоже не сработает, даже если это будет возможно. Какие-либо предложения? (Извините, если объяснение было немного отстойным, я все еще новичок в этом) :)

РЕДАКТИРОВАТЬ: Возможно, это не способ, которым я проверяю победителей, но порядок, в котором я увеличиваю их скорости. Их приращение, вероятно, должно происходить одновременно, а не от первого div к последнему div, но все еще остается вопрос, как я могу это сделать: /

1 Ответ

2 голосов
/ 16 февраля 2020

Вместо оператора if с большим количеством условий вы можете выполнить итерацию changePlayerArr следующим образом:

this.state.winnersArr = changePlayerArr.map(player => {
  if(player.speed <= -70) {
    return player;
  }
});

С map() вы можете go через каждого игрока и вернуть новый массив только с победителями. https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Позже вы можете проверить, какие игроки входят в массив победителей.

Если это соответствует свойству скорости, вы можете sort массив такой:

this.state.winnersArr.sort((firstEl, secondEl) => {
 return firstEl.speed > secondEl.speed;
});

Надеюсь, это ответит на ваш вопрос!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...