【问题标题】:Javascript - check array for value [duplicate]Javascript - 检查数组的值[重复]
【发布时间】:2012-06-16 10:41:40
【问题描述】:

我有一个带有银行假期的简单数组:

var bank_holidays = ['06/04/2012','09/04/2012','07/05/2012','04/06/2012','05/06/2012','27/08/2012','25/12/2012','26/12/2012','01/01/2013','29/03/2013','01/04/2013','06/05/2013','27/05/2013'];

我想做一个简单的检查,看看某些日期是否作为该数组的一部分存在,我已经尝试过:

if('06/04/2012' in bank_holidays) { alert('LOL'); }
if(bank_holidays['06/04/2012'] !== undefined) { alert 'LOL'; }

还有其他一些没有乐趣的解决方案,我还尝试用简单的“x”替换所有转发的斜杠,以防引起问题。

任何建议将不胜感激,谢谢!

(编辑)这是一个 jsFiddle - http://jsfiddle.net/ENFWe/

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    如果您不关心旧版浏览器:

    if ( bank_holidays.indexOf( '06/04/2012' ) > -1 )
    

    如果您确实关心旧版浏览器,MDN 上有一个可用的 shim。否则,jQuery 提供了一个等价的功能:

    if ( $.inArray( '06/04/2012', bank_holidays ) > -1 )
    

    【讨论】:

    • 应该反过来:arr.indexOf( value )
    • 糟糕,我不记得了 ;o)
    • @AlanKuras jQuery 版本会。或者,如果您在 MDN 上添加 shim,它就会出现。
    • @Nick,你有我的同情......
    • @Nick,它应该可以工作...jsfiddle.net/gaby/ycDkj
    【解决方案2】:

    试试这个:

    // this will fix old browsers
    if (!Array.prototype.indexOf) {
      Array.prototype.indexOf = function(value) {
        for (var i = 0; i < this.length; i++) {
          if (this[i] === value) {
            return i;
          }
        }
    
        return -1;
      }
    }
    
    // example
    if ([1, 2, 3].indexOf(2) != -1) {
      // yay!
    }
    

    【讨论】:

      【解决方案3】:

      应该这样做:

      for (var i = 0; i < bank_holidays.length; i++) {
          if (bank_holidays[i] === '06/04/2012') {
              alert('LOL');
          }
      }
      

      jsFiddle

      【讨论】:

      • 检查完整数组在计算复杂度方面效率不高
      • 绝对垃圾和荒谬的微优化建议 - 正如 OP 所说,它是一个简单的数组,如果匹配,OP 总是会中断,因此不会检查完整的数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多