Javascript массив содержит значение

Как проверить массив на наличие элемента в 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, и именно таким образом мы можем сделать проверку на наличие элемента.

Читайте также:  Тег SCRIPT

Теперь рассмотрим другой метод проверки, который сегодня часто используется. Этот метод называется 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

Смотрите также

Источник

Оцените статью