【问题标题】:jquery check if number is in a list [duplicate]jquery检查数字是否在列表中[重复]
【发布时间】:2013-07-29 16:06:17
【问题描述】:

我必须检查一个变量是否等于给定的数字或另一个。例如,我现在正在这样做。

if (num == 1 || num == 3 || num == 4 || etc.) {
    // Do something
} else if (num == 2 || num == 7 || num == 11 || etc.) {
    // Do something
}

我认为应该有一个更简单的方法。例如每个 if 语句的所有数字的数组。

var array1 = [1,3,4,5,6,8,9,10 etc.]
var array2 = [2,7,11,12,13,14 etc.]

然后看看这个数字是否等于这些数组之一中的任何值。但我不知道该怎么做..

【问题讨论】:

  • JQuery - .inArray.
  • 您可以使用.indexOf(),但请注意它是not supported in IE8 or lower。对于那些浏览器,您必须手动完成(或使用 jQuery 的 .inArray,因为此处标记了 jQuery)。
  • 或者,在兼容的浏览器中:[1,2,3,4,5].indexOf(2); // 1

标签: javascript jquery arrays


【解决方案1】:

indexOf() 方法在数组中搜索指定项,并返回其位置。

 var array1 = [1,3,4,5,6,8,9,10];
 var a = array1.indexOf(46); //a = -1; if not found

如果您需要支持没有 .indexOf() 的环境,您可以实现 MDN fix.

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
        "use strict";

        if (this === void 0 || this === null) throw new TypeError();

        var t = Object(this);
        var len = t.length >>> 0;
        if (len === 0) return -1;

        var n = 0;
        if (arguments.length > 0) {
            n = Number(arguments[1]);
            if (n !== n) // shortcut for verifying if it's NaN
            n = 0;
            else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) n = (n > 0 || -1) * Math.floor(Math.abs(n));
        }

        if (n >= len) return -1;

        var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);

        for (; k < len; k++) {
            if (k in t && t[k] === searchElement) return k;
        }
        return -1;
    };
}

【讨论】:

  • 请注意,IE8 或更低版本不支持Array.prototype.indexOf
【解决方案2】:

由于您要求使用 jQuery,因此有 .inArray()。如果未找到,则返回 -1,否则返回匹配元素的索引。

【讨论】:

    【解决方案3】:

    你为什么不做一个简单的 for 循环?

    for(var i = 0; i < array1.length; i++)
    {
      if(array[i] == num)
       {
         //     do something
         break;
       }
    }
    

    【讨论】:

    • 因为有一个函数可以做同样的事情?
    • 请考虑使用 inArray 函数。
    • 使用循环没有错。 -2 对于一个有效且快速的解决方案是愚蠢的。
    • 但该功能仅适用于 jQuery ...我认为问题主要是关于 javascript
    • ...还请注意,此答案在技术上比所有 indexOf()inArray() 答案更正确,因为它保持类型强制比较。不知道 OP 是否真的需要这个,但应该考虑到。
    【解决方案4】:

    你可以使用inArray函数(http://api.jquery.com/jQuery.inArray/

    <script>var arr = [ 4, "Pete", 8, "John" ];
    var $spans = $("span");
    $spans.eq(0).text(jQuery.inArray("John", arr));
    $spans.eq(1).text(jQuery.inArray(4, arr));
    $spans.eq(2).text(jQuery.inArray("Karl", arr));
    $spans.eq(3).text(jQuery.inArray("Pete", arr, 2));
    </script>
    

    输出:

    “约翰”发现于 3 4 发现于 0 没有找到“Karl”,所以 -1 “Pete”在数组中,但不在索引 2 处或之后,所以 -1

    【讨论】:

      【解决方案5】:

      不用 jQuery 也可以做到:

      if(array1.indexOf(num1) >= 0)//if -1, then not found
      

      【讨论】:

      • 请注意,IE8 或更低版本不支持Array.prototype.indexOf
      • 是的,但是 IE8 是很老的浏览器。没有人支持。
      • 为大公司工作或支持大公司。他们中的一些人仍然使用 IE7,其中许多人卡在 IE8 上。我经常需要在工作中为我们的客户支持 IE8。
      【解决方案6】:

      您不需要使用 jQuery。这是一个名为indexOf的内置函数:

      if ( arr.indexOf(item) !== -1 ) {
          // item is in array
      }
      

      【讨论】:

      • 请注意,IE8 或更低版本不支持Array.prototype.indexOf
      猜你喜欢
      • 1970-01-01
      • 2021-01-12
      • 2017-07-06
      • 2012-06-15
      • 1970-01-01
      • 2018-06-19
      • 2016-03-30
      • 2011-09-20
      • 2017-06-08
      相关资源
      最近更新 更多