web-dev-qa-db-ja.com

JavaScript/jQueryで配列に特定の文字列が含まれているかどうかを調べる方法

"specialword"が配列に含まれているかどうかを検出する方法を教えてもらえますか?例:

categories: [
    "specialword"
    "Word1"
    "Word2"
]
515
Cofey

本当にjQueryは必要ありません。

var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);

ヒント :indexOfは、指定された検索値が最初に出現する位置を表す数値を返します。出現しない場合は-1を返します。

または

function arrayContains(needle, arrhaystack)
{
    return (arrhaystack.indexOf(needle) > -1);
}

array.indexOf(..)IE <9 ではサポートされていませんが、jQueryのindexOf(...)関数はそれらの古いバージョンでも動作します。

840
James

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のラッパーですが、サポートしないものではシムを提供します。これは基本的に、Array.prototypeにshimを追加することと同等です。これは、より慣用的でJSっぽいやり方です。 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
590
lonesomeday

どうぞ:

$.inArray('specialword', arr)

この関数は正の整数(与えられた値の配列インデックス)を返します。与えられた値が配列内に見つからなかった場合は-1を返します。

ライブデモ: http://jsfiddle.net/simevidas/5Gdfc/

あなたはおそらくこれをこんな感じで使いたいでしょう:

if ( $.inArray('specialword', arr) > -1 ) {
    // the value is in the array
}
29
Šime Vidas

forループを使うことができます。

var found = false;
for (var i = 0; i < categories.length && !found; i++) {
  if (categories[i] === "specialword") {
    found = true;
    break;
  }
}
14
JaredPar

私は$.inArray(..)は好きではありません。それは、ほとんどの普通の人が耐えられないような、醜いjQuery風のソリューションです。これがあなたのアーセナルにシンプルな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);
}
4
Adam Eberlin