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
P粉0769873862023-08-24 00:14:12
现代浏览器有 Array#includes
,它完全做到了这一点,并且受到除 IE 之外的所有人的广泛支持:
console.log(['joe', 'jane', 'mary'].includes('jane')); // true