首页  >  问答  >  正文

在 JavaScript 中如何检查数组是否包含值?

<p>找出 JavaScript 数组是否包含值的最简洁、最有效的方法是什么?</p> <p>这是我知道的唯一方法:</p> <pre class="brush:php;toolbar:false;">function contains(a, obj) { for (var i = 0; i < a.length; i++) { if (a[i] === obj) { return true; } } return false; }</pre> <p>有没有更好、更简洁的方法来实现这一点?</p> <p>这与 Stack Overflow 问题 <em>在 JavaScript 数组中查找项目的最佳方式?</em> 密切相关,该问题解决了使用 <code>indexOf</code> 在数组中查找对象的问题。</p>
P粉592085423P粉592085423424 天前416

全部回复(2)我来回复

  • P粉788571316

    P粉7885713162023-08-24 00:43:22

    2019 年更新:这个答案来自 2008 年(11 岁了!),与现代 JS 的使用无关。承诺的性能改进是基于当时浏览器中完成的基准测试。它可能与现代 JS 执行上下文无关。如果您需要简单的解决方案,请寻找其他答案。如果您需要最佳性能,请在相关执行环境中为自己进行基准测试。

    正如其他人所说,通过数组进行迭代可能是最好的方法,但它 已被证明,递减的 while 循环是 JavaScript 中最快的迭代方式。因此,您可能需要按如下方式重写代码:

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

    当然,你也可以扩展Array原型:

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

    现在您可以简单地使用以下内容:

    alert([1, 2, 3].contains(2)); // => true
    alert([1, 2, 3].contains('2')); // => false

    回复
    0
  • P粉076987386

    P粉0769873862023-08-24 00:14:12

    现代浏览器有 Array#includes,它完全做到了这一点,并且受到除 IE 之外的所有人的广泛支持

    console.log(['joe', 'jane', 'mary'].includes('jane')); // true

    回复
    0
  • 取消回复