Может ли кто-нибудь подсказать мне, как определить, появляется ли `"специальное слово" в массиве? Пример:
categories: [
"specialword"
"word1"
"word2"
]
Вы действительно Дон'т нужно jQuery для этого.
var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);
подсказка: indexOf возвращает число, представляющее позицию, где указан searchvalue происходит впервые, или -1, если он не происходит
или
function arrayContains(needle, arrhaystack)
{
return (arrhaystack.indexOf(needle) > -1);
}
Это's стоит отметить, что в настоящее время.метод indexOf (..)- это [не поддерживается в IE < 9][1], но jQuery'ы метод indexOf функция
(...)` будет работать даже на старых версиях.
jQuery предлагает $.inArray
:
Обратите внимание, что inArray возвращает индекс найденного элемента, поэтому 0
указывает на то, что элемент является первым в массиве. -1
указывает на то, что элемент не найден.
var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];
var foundPresent = $.inArray('specialword', categoriesPresent) > -1;
var foundNotPresent = $.inArray('specialword', categoriesNotPresent) > -1;
console.log(foundPresent, foundNotPresent); // true false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Правка 3,5 года спустя
$.inArray
является эффективной оберткой для Array.prototype.indexOf
в браузерах, которые поддерживают его (почти все из них в настоящее время), в то же время обеспечивая шим в тех, которые этого не делают. По сути, это эквивалентно добавлению shim к Array.prototype
, что является более идиоматичным/JSish способом делать вещи. MDN предоставляет такой код. В наши дни я бы воспользовался этим вариантом, а не использовал обертку jQuery.
var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];
var foundPresent = categoriesPresent.indexOf('specialword') > -1;
var foundNotPresent = categoriesNotPresent.indexOf('specialword') > -1;
console.log(foundPresent, foundNotPresent); // true false
Редактировать еще 3 года спустя
Боже, 6,5 лет?!
Лучшим вариантом для этого в современном Javascript является Array.prototype.includes
:
var found = categories.includes('specialword');
Никаких сравнений и никаких запутанных результатов -1
. Он делает то, что мы хотим: возвращает true
или false
. Для более старых браузеров он является полифиллируемым используя код в MDN.
var categoriesPresent = ['word', 'word', 'specialword', 'word'];
var categoriesNotPresent = ['word', 'word', 'word'];
var foundPresent = categoriesPresent.includes('specialword');
var foundNotPresent = categoriesNotPresent.includes('specialword');
console.log(foundPresent, foundNotPresent); // true false
Вот, пожалуйста:
$.inArray('specialword', arr)
Эта функция возвращает целое положительное число (индекс массива заданного значения), или -1
, если заданное значение не было найдено в массиве.
Демонстрация в реальном времени:
Вероятно, вы захотите использовать эту функцию следующим образом:
if ( $.inArray('specialword', arr) > -1 ) {
// the value is in the array
}
Вы можете использовать цикл for
:
var found = false;
for (var i = 0; i < categories.length && !found; i++) {
if (categories[i] === "specialword") {
found = true;
break;
}
}
Я Дон'т, как `$.inArray (..), она'с отвратительным, решение на jQuery-ишь, что большинство здравомыслящих людей не'т терпеть. Здесь'ы фрагмент, который добавляет простой, содержит(ул.) метод в свой арсенал:
$.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);
}