具有多个参数的 indexOf

indexOf with multiple arguments

在数组上确定 indexOf 时是否可以使用多个参数?

我想确定我的数组是否包含三个整数中的任何一个。在此阶段需要注意的重要一点是,该数组 只有 有一个值(如果有更多值,则不会到达此代码块)。

array.indexOf(123 || 124 || 125) === 0

所以如果 array = [123] 那么我的 indexOf 应该是 0 因此 true.

如果 array = [124] 那么我的 indexOf 应该是 0 因此 true.

我发现发生的事情是 [123] 工作正常,但它甚至懒得检查 indexOf 的第二个或第三个参数,只是返回 false。

http://codepen.io/anon/pen/WxmyGp?editors=0011

|| 运算符 returns 左侧如果为真,否则 returns 右侧。 123 || 124 || 125 就意味着 123.

如果要测试数组中是否有多个值,则必须依次测试每个值。

array.indexOf(123) == 0 || array.indexOf(124) == 0 || array.indexOf(125) == 0 

因为你只关心数组的一个特定索引,你可以把整个事情颠倒过来:

[123, 124, 125].indexOf(array[0]) > -1

您可以使用 Array.some() 执行此操作。

这种方法的好处是您只需遍历数组一次。如果您 || 多个 indexOf() 一起调用,您将在每次错过搜索时继续迭代数组。

function checkArray(array) {
  return array.some(function(item) {
    return item == 123 || item == 124 || item == 125;
  });
};

console.log(checkArray([123, 456, 789]));
console.log(checkArray([456, 789]));
console.log(checkArray([789, 456, 125]));

如果您想获得多个结果,另一种方法是 Array.prototype.filter()。但是这将 return 你对象本身。如果您对指数感兴趣,那么您必须将它与 Array.prototype.reduce() 结合起来,例如;

var a = [1,2,3],
    b = a.filter(e => e === 1 || e === 2)
         .reduce((p,c) => p.concat(a.indexOf(c)),[]);
console.log(b);