Зачем менять условие «если», если я использую === вместо! ==? - PullRequest
0 голосов
/ 28 августа 2018

Функция проверяет, совпадают ли элементы массива, если они одинаковы, она должна возвращать true.

Когда я использую функцию ниже, она дает правильный результат.

var arr = [1, 2, 3, 4];

function isUniform(arr) {
  var store = arr[0];

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] !== store) {
      return false;
    }
  }
  return true;
}
console.log(isUniform(arr));

Но когда я использую такую ​​функцию, т.е. изменяя , если условие , возвращается false

var arr = [1, 2, 3, 4];

function isUniform(arr) {
  var store = arr[0];

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] === store) {
      return true;
    }
  }
  return false;

}

console.log(isUniform(arr));

Ответы [ 5 ]

0 голосов
/ 28 августа 2018

Цикл firts дает точный ответ, потому что элементы в списке не совпадают, проблема со вторыми циклами заключается в том, что он проверяет каждый элемент в списке, и когда я нашел элемент, равный array[0] ( в этом случае (1)) он вернет true, чего не может быть.

Вторые петли должны быть:

var arr = [1, 2, 3, 4];
    function isUniform(arr) {
      var store = arr[0];
      var response = false;
    
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] === store) {
          resonse = true;
          continue;
        }
        return response;
      }
      return response;
    
    }
console.log(isUniform(arr));
0 голосов
/ 28 августа 2018

Второй отсканированный код не проверяет, все ли элементы равны store, он возвращает true, если хотя бы один из них равен store.

И первый возвращает false, если все элементы не равны store, и с этого момента true, если все они равны store, но, будучи предвалами, он не проверяет если все элементы равны store, это только логическое заключение в этом случае.

0 голосов
/ 28 августа 2018

Возвращает истину ... Вы также можете рассмотреть возможность ...

arr.includes(arr[0]) // returns true
0 голосов
/ 28 августа 2018

Проблема в том, что ваш фрагмент возвращает true, если одно из следующих значений совпадает с arr[0], см. Приведенный ниже пример:

var arr = [1, 1, 3, 1, 1];

function isUniform(arr) {
  var store = arr[0];

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] === store) {
      return true;
    }
  }
  return false;

}

console.log(isUniform(arr));

Здесь функция возвращает true, как только начинается цикл for, поскольку arr[0] равно store

То, что вы должны использовать, это Array#every(), который проверяет, все ли элементы соответствуют определенным критериям:

var arr = [1, 1, 3, 1, 1];
var arr2 = [1,1,1,1,1,1,1];

function isUniform(arr) {
  return arr.every(e => e === arr[0]);
}

console.log(isUniform(arr));

console.log(isUniform(arr2));
0 голосов
/ 28 августа 2018

Потому что он вернет true, если первый элемент такой же. Он не будет проверять все элементы, в то время как второй вернет true, если все элементы одинаковы, если один из элементов не совпадает, он возвращает false.

Вероятно, самый короткий подход к этому:

 (new Set(array)).size === 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...