回答:
これを試して:
if(blockedTile.indexOf("118") != -1)
{
// element found
}
if(!!~blockedTile.indexOf('118))このメソッドは、結果> -1の場合は常にtrueを返し、結果=== -1の場合はfalseを返します
indexOf()リテラル配列などにも適用できますif (-1 == [84, 116].indexOf(event.keyCode))。Chrome 37.0.2062.122でテスト済み。
indexOf(…) >= 0。違いはなく、習慣としてそれを拾った場所を忘れます
前述のとおり、ご使用のブラウザがをサポートしている場合はindexOf()、そうでない場合は、それをポリフィルするか、lodash / underscoreなどのユーティリティベルトに依存する必要があります。
この新しいES2016の追加を追加したかっただけです(この質問を最新の状態に保つため):
if (blockedTile.includes("118")) {
// found element
}
これは、クロスブラウザ対応し、データがソートされている場合、バイナリ検索を行うことができます。
_.indexOf(array、value、[isSorted])配列で値が見つかるインデックスを返します。配列に値が存在しない場合は-1を返します。欠落していない限り、ネイティブのindexOf関数を使用します。大規模な配列を使用していて、配列が既に並べ替えられていることがわかっている場合は、trueをisSortedに渡して、より高速なバイナリ検索を使用します。
//Tell underscore your data is sorted (Binary Search)
if(_.indexOf(['2','3','4','5','6'], '4', true) != -1){
alert('true');
}else{
alert('false');
}
//Unsorted data works to!
if(_.indexOf([2,3,6,9,5], 9) != -1){
alert('true');
}else{
alert('false');
}
一部のブラウザはをサポートしていArray.indexOf()ます。
そうでない場合は、Arrayプロトタイプを使用してオブジェクトを拡張できます...
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(searchElement /*, fromIndex */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (len === 0)
return -1;
var n = 0;
if (arguments.length > 0)
{
n = Number(arguments[1]);
if (n !== n) // shortcut for verifying if it's NaN
n = 0;
else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
if (n >= len)
return -1;
var k = n >= 0
? n
: Math.max(len - Math.abs(n), 0);
for (; k < len; k++)
{
if (k in t && t[k] === searchElement)
return k;
}
return -1;
};
}
ソース。
好みに合わせて使用してください:
var blockedTile = [118, 67, 190, 43, 135, 520];
// includes (js)
if ( blockedTile.includes(118) ){
console.log('Found with "includes"');
}
// indexOf (js)
if ( blockedTile.indexOf(67) !== -1 ){
console.log('Found with "indexOf"');
}
// _.indexOf (Underscore library)
if ( _.indexOf(blockedTile, 43, true) ){
console.log('Found with Underscore library "_.indexOf"');
}
// $.inArray (jQuery library)
if ( $.inArray(190, blockedTile) !== -1 ){
console.log('Found with jQuery library "$.inArray"');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
2019年にそれを行う最良の方法は、使用することです .includes()
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(1, 2); // false
最初のパラメータはあなたが探しているものです。2番目のパラメーターは、検索を開始するこの配列のインデックス位置です。
ここでクロスブラウジングをする必要がある場合-従来の答えはたくさんあります。
すでに上記に回答しましたが、共有したかったです。
IEでは機能しません。@Mahmoudに言及してくれてありがとう
var array1 = [1, 2, 3];
console.log(array1.includes(2));
// expected output: true
var pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
// expected output: true
console.log(pets.includes('at'));
// expected output: false
ここにいくつかの参照を得ました。彼らはまた、上記のポリフィルを持っています。
Array.includes()ES7(ECMAScript 2017)で導入され、古いブラウザでは動作しません。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…–
配列は最適なソリューションではないようなので、別のデータ構造を使用します。
次のように、配列の代わりに、オブジェクトをハッシュテーブルとして使用します。
var arr = ["x", "y", "z"];
var map = {};
for (var k=0; k < arr.length; ++k) {
map[arr[k]] = true;
}
function is_in_map(key) {
try {
return map[key] === true;
} catch (e) {
return false;
}
}
function print_check(key) {
console.log(key + " exists? - " + (is_in_map(key) ? "yes" : "no"));
}
print_check("x");
print_check("a");
コンソール出力:
x exists? - yes
a exists? - no
これは簡単な解決策です。オブジェクト指向のアプローチにもっと興味がある場合は、Googleで「jsハッシュテーブル」を検索してください。
古いブラウザと最も互換性のある私見
Array.prototype.inArray = function( needle ){
return Array(this).join(",").indexOf(needle) >-1;
}
var foods = ["Cheese","Onion","Pickle","Ham"];
test = foods.inArray("Lemon");
console.log( "Lemon is " + (test ? "" : "not ") + "in the list." );
ArrayコピーをCSV文字列に変換することで、古いブラウザで文字列をテストできます。
['Lemon Pie'].inArray('Lemon')戻りTrueます。あなたは,それを回避するために針をラップするか、正規表現マッチングを使用して同様に行うことができますが、結合は,同様の偽陽性の理由よりも曖昧なものを使用することが好ましいでしょう(|例えば)。データセットによって異なります
Array.filterを使用しないのはなぜですか?
var array = ['x','y','z'];
array.filter(function(item,index,array){return(item==YOURVAL)}).
それをコードにコピーするだけで、次のようになります。
Array.prototype.inArray = function (searchedVal) {
return this.filter(function(item,index,array){return(item==searchedVal)}).length==true
}
配列の例では、php(in_array)でも同じです
var ur_fit = ["slim_fit", "tailored", "comfort"];
var ur_length = ["length_short", "length_regular", "length_high"];
if(ur_fit.indexOf(data_this)!=-1){
alert("Value is avail in ur_fit array");
}
else if(ur_length.indexOf(data_this)!=-1){
alert("value is avail in ur_legth array");
}
var myArray = [2,5,6,7,9,6];
myArray.includes(2) // is true
myArray.includes(14) // is false
includes。この回答は、それらと比較して追加の値をどのように提供しますか?
以下のコードを試すことができます。http://api.jquery.com/jquery.grep/を確認してください
var blockedTile = new Array("118", "67", "190", "43", "135", "520");
var searchNumber = "11878";
arr = jQuery.grep(blockedTile, function( i ) {
return i === searchNumber;
});
if(arr.length){ console.log('Present'); }else{ console.log('Not Present'); }
0より大きい場合はarr.lengthをチェックして、文字列が存在することを意味します。それ以外の場合は存在しません。
私は最も簡単な方法はそれだと思います:
(118 in blockedTile); //is true