これを確認するために今使っている関数は次の通りです。
function inArray(needle,haystack)
{
var count=haystack.length;
for(var i=0;i<count;i++)
{
if(haystack[i]===needle){return true;}
}
return false;
}
これで動作します。私が探しているのは、もっと良い方法があるかどうかです。
Code:
function isInArray(value, array) {
return array.indexOf(value) > -1;
}
Execution:
isInArray(1, [1,2,3]); // true
更新(2017年):。
ECMAScript 2016 (ES7) 標準に従っているモダンブラウザでは、関数 Array.prototype.include を使用することができます。これにより、ある項目が配列に存在するかどうかをチェックすることがより簡単になります。
const array = [1, 2, 3];
const value = 1;
const isInArray = array.includes(value);
console.log(isInArray); // true
ただ、indexOf
を使用します。
haystack.indexOf(needle) >= 0
古いインターネットエクスプローラー(< IE9)に対応したい場合は、回避策として現在のコードを含める必要がありますが。
リストがソートされていない限り、すべての値を針と比較する必要があります。したがって、あなたのソリューションと indexOf
の両方が、平均して n/2
個の比較を実行する必要があります。しかし、indexOf
はビルトインのメソッドなので、追加の最適化を使用する可能性があり、実際には若干速くなります。ただし、アプリケーションが非常に頻繁にリストを検索したり(たとえば1秒間に1,000回)、リストが巨大であったり(たとえば100kエントリー)しない限り、速度差は問題になりません。