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

新手上路,请多包涵

找出 JavaScript 数组是否包含值的最简洁有效的方法是什么?

这是我知道的唯一方法:

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

有没有更好更简洁的方法来实现这一点?

这与 Stack Overflow 问题密切相关 在 JavaScript 数组中查找项目的最佳方法是什么? 它解决了使用 indexOf 在数组中查找对象的问题。

原文由 brad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 636
2 个回答

现代浏览器有 Array#includes ,它 正是 这样做的,并且得到了除 IE 之外的所有人 的广泛支持

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

您也可以使用 Array#indexOf ,它不那么直接,但对于过时的浏览器不需要 polyfill。

 console.log(['joe', 'jane', 'mary'].indexOf('jane') >= 0); //true

许多框架也提供了类似的方法:

请注意,一些框架将其实现为一个函数,而另一些框架则将该函数添加到数组原型中。

原文由 codeape 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Damir Zekić 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题