javascript filter 複数条件 - ある項目がJavaScriptの配列に含まれているかどうかを調べる最良の方法は?

JavaScript findIndex / javascript / arrays

あるオブジェクトが配列の中にあるかどうかを調べるにはどうしたらいいですか?

function include(arr, obj) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] == obj) return true;
  }
}

console.log(include([1, 2, 3, 4], 3)); // true
console.log(include([1, 2, 3, 4], 6)); // undefined

dota2pro



Answer #1
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (obj, fromIndex) {
        if (fromIndex == null) {
            fromIndex = 0;
        } else if (fromIndex < 0) {
            fromIndex = Math.max(0, this.length + fromIndex);
        }
        for (var i = fromIndex, j = this.length; i < j; i++) {
            if (this[i] === obj)
                return i;
        }
        return -1;
    };
}

長さを保存するように変更し、繰り返しのたびに長さを調べる必要がなくなりました。しかし、その差は大きくありません。汎用性の低い関数の方が速いかもしれません。

var include = Array.prototype.indexOf ?
    function(arr, obj) { return arr.indexOf(obj) !== -1; } :
    function(arr, obj) {
        for(var i = -1, j = arr.length; ++i < j;)
            if(arr[i] === obj) return true;
        return false;
    };