Как узнать, содержится ли определенная строка в массиве на JavaScript/jQuery?
Как можно проверить, содержится ли слово "specialword"
в массиве? Например, у меня есть следующий массив:
categories: [
"specialword",
"word1",
"word2"
]
Какое решение подойдет для этой задачи?
5 ответ(ов)
Вот так:
$.inArray('specialword', arr)
Эта функция возвращает положительное целое число (индекс в массиве для данного значения) или -1
, если заданное значение не найдено в массиве.
Рабочий пример: http://jsfiddle.net/simevidas/5Gdfc/
Вы, вероятно, хотите использовать это следующим образом:
if ( $.inArray('specialword', arr) > -1 ) {
// значение есть в массиве
}
Вы можете использовать метод includes (встроенная функция JavaScript), который вернет true
, если значение найдено, и false
, если нет.
Если вам нужен точный индекс, вы можете использовать indexOf (также встроенная функция JavaScript), которая вернет точный индекс, если значение найдено, или -1
, если его нет.
Вы также можете заменить .includes на метод .some, который возвращает булево значение. Этот метод завершит выполнение, как только найдет совпадение, что отлично сказывается на производительности при работе с большими массивами.
Обратите внимание: все методы регистрозависимы.
var myarr = ["I", "like", "turtles"];
isVal = myarr.includes('like')
index = myarr.indexOf('like')
some = myarr.some(item => item.toLowerCase() == 'like'.toLowerCase())
console.log(isVal) // true
console.log(index) // 1
console.log(some) // true
Пожалуйста, проверьте это.
Вы можете использовать цикл for
, как показано ниже:
var found = false;
for (var i = 0; i < categories.length && !found; i++) {
if (categories[i] === "specialword") {
found = true;
break;
}
}
В этом примере мы проходим по массиву categories
и проверяем, есть ли в нем элемент, равный "specialword"
. Если такой элемент найден, переменная found
устанавливается в true
, и цикл прекращает свою работу с помощью оператора break
.
Конечно! Вот перевод этого фрагмента на русский язык в стиле ответа на вопрос на StackOverflow:
С использованием современных методов массива в JavaScript:
Array.prototype.includes() // введен в ES7:
- возвращает логическое значение (boolean)
const data = {
categories: [
"specialword",
"word1",
"word2"
]
}
console.log("Array.prototype.includes()")
// Array.prototype.includes()
// возвращает логическое значение
console.log(data.categories.includes("specialword")) // true
console.log(data.categories.includes("non-exist")) // false
.as-console-wrapper { max-height: 100% !important; top: 0; }
Array.prototype.find() // введен в ES6:
- возвращает найденный элемент или undefined
const data = {
categories: [
"specialword",
"word1",
"word2"
]
}
console.log("Array.prototype.find()")
// Array.prototype.find()
// возвращает элемент, если он найден
// возвращает undefined, если не найден
console.log(data.categories.find(el => el === "specialword") != undefined) // true
console.log(data.categories.find(el => el === "non-exist") != undefined) // false
.as-console-wrapper { max-height: 100% !important; top: 0; }
Если у вас есть дополнительные вопросы, пожалуйста, дайте знать!
Я не люблю $.inArray(..)
, это такое некрасивое, "джеквориевское" решение, которое большинство здравомыслящих людей не потерпят. Вот фрагмент кода, который добавляет простую функцию contains(str)
в вашу коллекцию методов:
$.fn.contains = function (target) {
var result = null;
$(this).each(function (index, item) {
if (item === target) {
result = item;
}
});
return result ? result : false;
}
Аналогичным образом, вы можете обернуть $.inArray
в расширение:
$.fn.contains = function (target) {
return ($.inArray(target, this) > -1);
}
Эти решения позволяют более элегантно проверять наличие элементов без использования $.inArray
.
Как проверить, содержит ли строка подстроку?
Как перенаправить на другую веб-страницу?
Прокрутка к элементу с использованием jQuery
Как перемешать (сделать случайным) массив в JavaScript?
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?