为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

POPMUISE 2019-06-19 10:21:57
查找条目是否在JavaScript数组中的最佳方法?如果一个对象在数组中,那么最好的方法是什么?这是我所知道的最好的方法:function include(arr, obj) {     for(var i=0; i<arr.length; i++) {         if (arr[i] == obj) return true;     }}include([1,2,3,4], 3); // trueinclude([1,2,3,4], 6); // undefined
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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

arr.includes(obj);

如果您想支持IE或其他旧浏览器:

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

编辑:但这在IE6、7或8上不起作用。最好的解决办法是自己定义它,如果它不存在的话:

  1. 莫兹拉(ECMA-262)版本:

      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. 丹尼尔·詹姆斯版本:

    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. 甾醇酸版本:

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


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 458 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信