一尘不染

查找项目是否在JavaScript数组中的最佳方法?

javascript

查找对象是否在数组中的最佳方法是什么?

这是我知道的最好方法:

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

阅读 291

收藏
2020-04-25

共1个答案

一尘不染

从ECMAScript 2016开始,您可以使用 includes()

arr.includes(obj);

如果要支持IE或其他较旧的浏览器:

function include(arr,obj) {
    return (arr.indexOf(obj) != -1);
}

编辑:这将无法在IE6、7或8上运行。最好的解决方法是自行定义它(如果不存在):

  1. Mozilla)版本:

      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)
        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;
    

    };

    }

  2. Daniel James的版本:

    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;
    };
    }

  3. roosteronacid’s 版本:

    Array.prototype.hasObject = (
    

    !Array.indexOf ? function (o)
    {
    var l = this.length + 1;
    while (l -= 1)
    {
    if (this[l - 1] === o)
    {
    return true;
    }
    }
    return false;
    } : function (o)
    {
    return (this.indexOf(o) !== -1);
    }
    );

2020-04-25