1. ホーム
  2. javascript

[解決済み] 配列に値が含まれているかどうかを判定する【重複】について

2022-03-20 06:17:47

質問

ある値が配列に存在するかどうかを判断したい。

以下の関数を使用しています。

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] == obj) {
            return true;
        }
    }
    return false;
}

上記の関数は常にfalseを返します。

配列の値と関数の呼び出しは次のとおりです。

arrValues = ["Sam","Great", "Sample", "High"]
alert(arrValues.contains("Sam"));

解決方法は?

var contains = function(needle) {
    // Per spec, the way to identify NaN is that it is not equal to itself
    var findNaN = needle !== needle;
    var indexOf;

    if(!findNaN && typeof Array.prototype.indexOf === 'function') {
        indexOf = Array.prototype.indexOf;
    } else {
        indexOf = function(needle) {
            var i = -1, index = -1;

            for(i = 0; i < this.length; i++) {
                var item = this[i];

                if((findNaN && item !== item) || item === needle) {
                    index = i;
                    break;
                }
            }

            return index;
        };
    }

    return indexOf.call(this, needle) > -1;
};

このように使うことができます。

var myArray = [0,1,2],
    needle = 1,
    index = contains.call(myArray, needle); // true

CodePenの検証/使用方法