Цикл, когда встречаются истина и ложь - PullRequest
0 голосов
/ 09 октября 2019

У меня есть кусок кода, где всегда встречаются ИСТИНА и ЛОЖЬ или всегда ЛОЖЬ. Что мне нужно сделать, это сделать разные действия, если одно из них является ИСТИНА или другая логика, если все являются ложными

let distance = [0.004996111561227907, 14.897649343418598, 5654.180955177425]

for(i=0; i< distance.length; i++){
	if(distance[i] < 0.05){
  	$('#phrase').text('IM CLOSE!!')
  }else{
    $('#phrase').text('IM NOT CLOSE')
  }
}
body {
  background: white;
  padding: 20px;
  font-family: Helvetica;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="phrase">
  
</p>

Вот пример: https://jsfiddle.net/h5rbzLgn/

Здесь одно из расстояний distance < 0.05, а остальные distance > 0.05 поэтому он всегда выбирает логику для ложного утверждения.

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

Ответы [ 4 ]

1 голос
/ 09 октября 2019

Проблема в том, что ваш цикл не завершается, когда он находит true случай. Он оценивает каждый элемент массива и соответственно обновляет текст. В результате текст всегда будет соответствовать последнему элементу в массиве . В этом случае этот элемент НЕ «закрывается».

Чтобы выйти из цикла, используйте break:

let distance = [0.004996111561227907, 14.897649343418598, 5654.180955177425]

for (i = 0; i < distance.length; i++) {
  if (distance[i] < 0.05) {
    $('#phrase').text('IM CLOSE!!')
    break;  //  <--------------------------- EXIT THE LOOP
  } else {
    $('#phrase').text('IM NOT CLOSE')
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="phrase">

</p>

Хотя лично я бы использовал .some(). Вы можете передать ему условие, и если любой элементов в вашем массиве удовлетворяет условию, он остановится и вернет true. В противном случае возвращается false.

const CLOSE_DISTANCE = 0.05;

let distance = [0.004996111561227907, 14.897649343418598, 5654.180955177425];
let anyClose = distance.some(i => i < CLOSE_DISTANCE);
let message = anyClose ? "Close" : "Not Close";

$("#phrase").text(message);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="phrase"></p>
1 голос
/ 09 октября 2019

В JSFiddle отображается «IM NOT CLOSE», потому что последний элемент больше 0,05

let distance = [0.004996111561227907, 14.897649343418598, 5654.180955177425]

for (i = 0; i < distance.length; i++) {
  if (distance[i] < 0.05) {   // one of them are true
    console.log('IM CLOSE!!');
    break;
  }
}
if (i === distance.length) {  // all of them are false
  console.log('IM NOT CLOSE');
}
1 голос
/ 09 октября 2019

Вы хотите завершить цикл for при выполнении определенных условий.

let distance = [0.004996111561227907, 14.897649343418598, 5654.180955177425]

for(i=0; i< distance.length; i++){
  if(distance[i] < 0.05){
    $('#phrase').text('IM CLOSE!!')
    break;
  }else{
    $('#phrase').text('IM NOT CLOSE')
  }
}
0 голосов
/ 09 октября 2019

// использовать append

let distance = [0.004996111561227907, 14.897649343418598, 5654.180955177425]

for(let i in distance){
    if(distance[i] < 0.05){
    $('#phrase').append('IM CLOSE!!')
  }else{
    $('#phrase').append('IM NOT CLOSE')
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...