Проблема в том, что ваш цикл не завершается, когда он находит 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>