8

Проверка присутствия элемента в массиве

8

Описание проблемы

Я использую следующую функцию для проверки, содержится ли значение в массиве:

function inArray(needle, haystack) {
    var count = haystack.length;
    for (var i = 0; i < count; i++) {
        if (haystack[i] === needle) {
            return true;
        }
    }
    return false;
}

Функция работает, но я хотел бы узнать, есть ли более эффективный или современный способ выполнения этой задачи в JavaScript. Было бы здорово получить рекомендации по улучшению этого кода.

3 ответ(ов)

0

В вашем коде !!(arr.indexOf("val")+1) используется для проверки, содержится ли значение "val" в массиве arr. Этот код возвращает true, если значение найдено (индекс будет >= 0), и false, если значение не найдено.

Функция indexOf возвращает индекс элемента в массиве, если он существует, и -1, если нет. При добавлении 1 к индексу, вы получаете 0, если элемент не найден (что преобразуется в false), и значение больше 0, если элемент найден (что преобразуется в true). Двойное отрицание !! приводит к приведению к булевому типу данных.

Однако, стоит отметить, что код будет ошибочно возвращать false для первого элемента, если он равен "val" (так как indexOf для первого элемента возвращает 0, и 0 + 1 даст 1, что для !! даёт true). Чтобы исправить это, можно убрать +1 и просто использовать arr.includes("val"), который более интуитивно понятен:

arr.includes("val")

Таким образом, окончательный код, который корректно проверяет наличие элемента, будет таким:

arr.includes("val")
0

Вы можете использовать метод indexOf, однако он может работать некорректно в последней версии Internet Explorer.

Код:

function isInArray(value, array) {
  return array.indexOf(value) > -1;
}

Пример выполнения:

isInArray(1, [1, 2, 3]); // true

Я рекомендую использовать следующий код:

function inArray(needle, haystack) {
  var length = haystack.length;
  for (var i = 0; i < length; i++) {
    if (haystack[i] == needle) {
      return true;
    }
  }
  return false;
}

Этот вариант работает более надежно и будет совместим с более старыми версиями браузеров.

0

С момента появления ECMAScript 6, вы можете использовать Set для работы с уникальными значениями. Вот пример использования:

var myArray = ['A', 'B', 'C'];
var mySet = new Set(myArray);
var hasB = mySet.has('B'); // true
var hasZ = mySet.has('Z'); // false

В данном примере мы создаем массив myArray, затем инициализируем Set на основе этого массива. Метод .has() позволяет проверить, содержит ли набор (set) конкретное значение. В данном случае hasB будет истинным (true), так как 'B' присутствует в Set, а hasZ ложно (false), так как 'Z' отсутствует.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь