- Как проверить массив на наличие элемента в JavaScript?
- Пример
- Пример
- Array.prototype.includes()
- Интерактивный пример
- Синтаксис
- Параметры
- Возвращаемое значение
- Примеры
- fromIndex больше или равен длине массива
- Вычисленный индекс меньше нуля 0
- Использование includes() в качестве общих метода
- Полифил
- Спецификации
- Поддержка браузерами
- Смотрите также
Как проверить массив на наличие элемента в JavaScript?
Массив — это тип данных, который может содержать несколько значений в одной переменной. Это будет отличным решением при наличии списка разных элементов, которые хотите хранить. Сортировка разных элементов также помогает при поиске. Знание основных операций массивов важно для улучшения ваших навыков программирования. Рассмотрим пример массива:
Пример
html> html> body> h2>Массивы JavaScript h2> p id="demo"> p> script> var flowers = ["rose", "daisy", "lily"]; document.getElementById("demo").innerHTML = flowers; script> body> html>
Довольно часто нам может понадобится проверить наличие элемента в массиве JavaScript. В этой статье мы расскажем о подобных методах.
Прежде всего мы ознакомимся с простым, но работающим решением. Нам понадобится указать оператор:
var array = [11, 20, 8, 6, 17]; var el = 6; //Element to be searched for(var i=0; ilength; i++) < if(el === array[i]) < console.log('Element Found'); > >
Как видите массив переходит из index 0 в array.length — 1 index. Он работает следующим образом: в условном операторе if мы проверяем, равен ли элемент в массиве значению элемента в поиске. Если это так, печатаем ‘Element found’.
Теперь укажем условный оператор for и переменную, чтобы указать найден ли элемент.
var array = [11, 20, 8, 6, 17]; var el = 6; //Element to be searched var flag = 0; // Initially 0 - Not found for(var i=0; ilength; i++) < if(el === array[i]) < flag = 1; > > //Check if flag value changed. if(flag == 1) < console.log('Element Found'); > else < console.log('Element Not Found'); >
Если элемент найден, значение flag будет изменен внутри условного оператора if, и именно таким образом мы можем сделать проверку на наличие элемента.
Теперь рассмотрим другой метод проверки, который сегодня часто используется. Этот метод называется includes().
Данный метод возвращает true, если массив содержит указанный элемент, а в противном случае — false:
var array = [11, 20, 8, 6, 17]; console.log( array.includes(6) ); //True
Пример
html> html> body> h1>Array includes() h1> p>Проверьте, содержит ли массив "Daisy": p> p id="demo"> p> p>strong>Note: strong> Метод includes не поддерживается в Edge 13 (и более старых версиях). p> script> var fruits = ["Rose", "Daisy", "Lily", "Jasmine"]; var n = flowers.includes("Daisy"); document.getElementById("demo").innerHTML = n; script> body> html>
Есть еще один полезный метод. Метод indexOf method используется, чтобы найти индекс элемента массива. Он указывает, содержит ли массив указанный элемент. Если указанный элемент найден в методе JavaScript indexOf, он возвращает номер индекса данного элемента. Если элемент не найден, indexOf возвращает значение -1. Код будет иметь такой вид:
var myArray = ["Rose", "Lily", "Daisy", "Jasmine"]; if (myArray.indexOf(searchTerm) === -1) < console.log("element doesn't exist"); > else < console.log("element found"); >
Эти два метода имеют два параметра: element и start.
Параметр | Описание |
---|---|
element | Необходимый параметр. Элемент, который хотим найти. |
start | Дополнительный параметр. По умолчанию — 0. Указывает, с какой позиции в массиве начать поиск. |
Array.prototype.includes()
Метод includes() определяет, содержит ли массив определённый элемент, возвращая в зависимости от этого true или false .
Интерактивный пример
Синтаксис
arr.includes(searchElement[fromIndex = 0])
Параметры
Позиция в массиве, с которой начинать поиск элемента searchElement . При отрицательных значениях поиск производится начиная с индекса array.length + fromIndex по возрастанию. Значение по умолчанию равно 0.
Возвращаемое значение
Примеры
[1, 2, 3].includes(2); // true [1, 2, 3].includes(4); // false [1, 2, 3].includes(3, 3); // false [1, 2, 3].includes(3, -1); // true [1, 2, NaN].includes(NaN); // true
fromIndex больше или равен длине массива
Если fromIndex больше или равен длине массива, то возвращается false . При этом поиск не производится.
var arr = ['a', 'b', 'c']; arr.includes('c', 3); // false arr.includes('c', 100); // false
Вычисленный индекс меньше нуля 0
Если fromIndex отрицательный, то вычисляется индекс, начиная с которого будет производиться поиск элемента searchElement . Если вычисленный индекс меньше нуля, то поиск будет производиться во всём массиве.
// длина массива равна 3 // fromIndex равен -100 // вычисленный индекс равен 3 + (-100) = -97 var arr = ['a', 'b', 'c']; arr.includes('a', -100); // true arr.includes('b', -100); // true arr.includes('c', -100); // true
Использование includes() в качестве общих метода
includes() специально сделан общим. Он не требует, чтобы this являлся массивом, так что он может быть применён к другим типам объектов (например, к массивоподобным объектам). Пример ниже показывает использование метода includes() на объекте arguments.
(function() console.log([].includes.call(arguments, 'a')); // true console.log([].includes.call(arguments, 'd')); // false >)('a','b','c');
Полифил
// https://tc39.github.io/ecma262/#sec-array.prototype.includes if (!Array.prototype.includes) Object.defineProperty(Array.prototype, 'includes', value: function(searchElement, fromIndex) if (this == null) throw new TypeError('"this" is null or not defined'); > // 1. Let O be ? ToObject(this value). var o = Object(this); // 2. Let len be ? ToLength(? Get(O, "length")). var len = o.length >>> 0; // 3. If len is 0, return false. if (len === 0) return false; > // 4. Let n be ? ToInteger(fromIndex). // (If fromIndex is undefined, this step produces the value 0.) var n = fromIndex | 0; // 5. If n ≥ 0, then // a. Let k be n. // 6. Else n < 0,// a. Let k be len + n. // b. If k < 0, let k be 0.var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); function sameValueZero(x, y) return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y)); > // 7. Repeat, while k < lenwhile (k len) // a. Let elementK be the result of ? Get(O, ! ToString(k)). // b. If SameValueZero(searchElement, elementK) is true, return true. if (sameValueZero(o[k], searchElement)) return true; > // c. Increase k by 1. k++; > // 8. Return false return false; > >); >
Если требуется поддержка устаревших движков JavaScript, которые не поддерживают Object.defineProperty , то наилучшим решением будет вообще не делать полифил для методов Array.prototype , так как не получится сделать их неперечисляемыми.
Спецификации
Поддержка браузерами
BCD tables only load in the browser