Jak znaleźć, czy tablica zawiera określony ciąg znaków w JavaScript / jQuery? [duplikat]
Czy ktoś może mi powiedzieć jak wykryć czy "specialword"
pojawia się w tablicy? Przykład:
categories: [
"specialword"
"word1"
"word2"
]
5 answers
Naprawdę nie potrzebujesz do tego jQuery.
var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);
Podpowiedź: indexOf Zwraca liczbę, reprezentującą pozycję, w której podana wartość searchvalue występuje po raz pierwszy, lub -1, jeśli nigdy występuje
Lub
function arrayContains(needle, arrhaystack)
{
return (arrhaystack.indexOf(needle) > -1);
}
Warto zauważyć, że array.indexOf(..)
jest nie wspierane w IE , ale funkcja jQuery indexOf(...)
będzie działać nawet dla tych starszych wersji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-26 11:35:47
JQuery oferuje $.inArray
:
Zauważ, że inArray zwraca indeks znalezionego elementu, więc 0
wskazuje, że element jest pierwszy w tablicy. -1
wskazuje, że element nie został znaleziony.
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>
Edit 3.5 years later
$.inArray
jest faktycznie wrapperem dla Array.prototype.indexOf
w przeglądarkach, które go obsługują (prawie wszystkie w dzisiejszych czasach), zapewniając jednocześnie shim w tych, które go nie obsługują. jest to zasadniczo odpowiednik dodawanie shim do Array.prototype
, co jest bardziej idiomatycznym / JSish sposobem robienia rzeczy. MDN dostarcza taki kod . W dzisiejszych czasach wybrałbym tę opcję, zamiast używać wrappera 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
Edit another 3 years later
rany, 6,5 roku?!
Najlepszą opcją w nowoczesnym Javascript jest Array.prototype.includes
:
var found = categories.includes('specialword');
Żadnych porównań i żadnych mylących wyników -1
. Robi to, co chcemy: zwraca true
lub false
. W starszych przeglądarkach można go polyfillować za pomocą kodu 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-31 16:25:26
Proszę bardzo:
$.inArray('specialword', arr)
Ta funkcja zwraca dodatnią liczbę całkowitą (indeks tablicy podanej wartości), lub -1
jeśli podana wartość nie została znaleziona w tablicy.
Live demo: http://jsfiddle.net/simevidas/5Gdfc/
Prawdopodobnie chcesz użyć tego w ten sposób:
if ( $.inArray('specialword', arr) > -1 ) {
// the value is in the array
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-24 20:39:35
Możesz użyć pętli for
:
var found = false;
for (var i = 0; i < categories.length && !found; i++) {
if (categories[i] === "specialword") {
found = true;
break;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-21 01:22:45
Nie lubię $.inArray(..)
, to rodzaj brzydkiego, jQuery-owskiego rozwiązania, którego większość zdrowych ludzi nie tolerowałaby. Oto fragment, który dodaje prostą metodę contains(str)
do twojego arsenału:
$.fn.contains = function (target) {
var result = null;
$(this).each(function (index, item) {
if (item === target) {
result = item;
}
});
return result ? result : false;
}
Podobnie można zawinąć $.inArray
W rozszerzenie:
$.fn.contains = function (target) {
return ($.inArray(target, this) > -1);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-31 05:29:52