【发布时间】:2021-09-10 07:11:52
【问题描述】:
找出 JavaScript 数组是否包含值的最简洁有效的方法是什么?
这是我知道的唯一方法:
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
}
有没有更好更简洁的方法来实现这一点?
【问题讨论】:
-
刚刚测试过:你的方式实际上是跨浏览器最快的:jsperf.com/find-element-in-obj-vs-array/2(除了在变量中预先保存a.length)而使用indexOf(如$.inArray)要慢得多
-
许多人回答说 Array#indexOf 是您最好的选择。但是,如果您想要一些可以正确转换为布尔值的东西,请使用:
~[1,2,3].indexOf(4)将返回 0,其评估结果为 false,而~[1,2,3].indexOf(3)将返回 -3,其评估结果为 true。 -
~不是你想用来转换为布尔值的,因为你需要!。但在这种情况下,你想用 -1 检查是否相等,所以函数可能 endreturn [1,2,3].indexOf(3) === -1;~不是二进制,它会单独反转值的每一位。 -
@Iordvlad
[1,2,3].indexOf(4)实际上是 return -1。正如@mcfedr 所指出的,~是bitwise-NOT operator,参见 ES5 11.4.8。问题是,由于-1的二进制表示仅由 1 组成,它的补码是0,其评估结果为假。任何其他数字的补数都将是非零的,因此是正确的。所以,~工作得很好,并且经常与indexOf结合使用。 -
标题具有误导性。
[[1,2],[3,4]].includes([3,4])在哪里?
标签: javascript arrays algorithm time-complexity javascript-objects