Почему это работает (JavaScript)? - PullRequest
0 голосов
/ 20 сентября 2019

Я работал над одним из моих проектов и должен был проверить, являются ли какие-либо из координат в двух массивах (одинаковой длины) с одним и тем же индексом одинаковыми или нет.Я знаю, что есть немного способов сделать это, но я столкнулся с тем, который начал повышать мое любопытство.Почему это работает?Итак, вот синтаксис -

 exports.check = (arr1, arr2) => {
  for(var i = arr1.length; i--;) {
    if(arr1[i] !== arr2[i])
        return true; //If none of the points are the same
  }return false; //If some of the points are the same
}

Насколько я знаю, оператор return должен останавливать / прерывать цикл и возвращать первое значение в любом случае.Верно или нет.Но это не так ... Может кто-нибудь объяснить, что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Это может быть проще для понимания, если представить это так:

//returns true if arrays differ or false if arrays are same
exports.arraysAreDifferent = (arr1, arr2) =>
{
  for(var i = arr1.length; i>=0; i--) {
    if(arr1[i] !== arr2[i]){
        return true; //if even one pair of array values differ, arrays are different 
    } else {
      //do nothing/check next pair 
    }
  }

  return false; //Loop finished without finding difference. Arrays are same
}

Комментарии были немного вводящими в заблуждение, и отступ / брекетинг / вставка возвращали ложь после того, как скобка девчушки, которая закрывала цикл, могла бытьсбивающее с толку прочтение, которое выглядело так, как будто «если x, а затем вернуть это, то иное возвращаемое», так что вы, возможно, уже подумали, как цикл завершится.Это бежит, потому что больше нет;если проверка if всегда не проходит, цикл проходит через каждую пару

0 голосов
/ 20 сентября 2019

Вероятно, вас смущает то, как выглядит блок if.Вы можете избежать скобок, если результат после проверки if является однострочным.Он возвращает true только и только когда не совпадение.

Это:

 exports.check = (arr1, arr2) => {
  for(var i = arr1.length; i--;) {
    if(arr1[i] !== arr2[i])
        return true; //If none of the points are the same
  }return false; //If some of the points are the same
}

совпадает с:

 exports.check = (arr1, arr2) => {
  for(var i = arr1.length; i--;) {
    if(arr1[i] !== arr2[i]) {
        return true; 
    }
  }
 return false; 
}

PS: комментарии в вашем коде неверны и код тоже.Это просто для объяснения о if блоке

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