代码之家  ›  专栏  ›  技术社区  ›  Tony_Henrich

jquery$.inarray()无法正确处理jquery makearray()生成的数组

  •  2
  • Tony_Henrich  · 技术社区  · 14 年前

    我用这个创建了一个日期数组:

     var holidays = ["7/24/2010","7/25/2010"];
     var holidaysArray = jQuery.makeArray(holidays);
    

    然后测试数组中是否存在mydate(日期对象):

    if ($.inArray(myDate, holidaysArray ) == -1) {....}
    

    然而,测试总是返回-1,即使mydate是两天中的一天。我试图避免使用日期字符串来进行测试。

    如何将inarray函数用于日期对象和日期对象数组?(我不确定HolidaysArray是否是日期对象的数组,也许这就是测试失败的原因。)

    3 回复  |  直到 14 年前
        1
  •  4
  •   Pablo Fernandez    14 年前

    我想你在比较 Date String 对象,这就是为什么你总是错误的原因。

    见:

    new Date("12/12/2000") == "12/12/2000" // this is false
    

    编辑:

    也!注意:

    new Date("12/12/2000") == new Date("12/12/2000") // this is false too!
    

    您应该使用这样的时间值比较日期

    new Date("12/12/2000").valueOf() == new Date("12/12/2000").valueOf() // this is TRUE
    
        2
  •  0
  •   nicolaskruchten    14 年前

    总结他人的答案:

    1. 您已经有了一个数组,不需要使用MakeArray()。
    2. 数组不包含日期,它包含字符串。
    3. 不能在javascript中直接比较日期。
        3
  •  0
  •   Dan Stocker    14 年前

    基本上你想执行搜索(查找),对吗?

    如果您这样构造您的数组:

    var holidays = [{ date: "7/24/2010" }, { date: "7/25/2010" }];
    

    创建一个 jOrder 表,按日期索引(唯一):

    var table = jOrder(holidays)
        .index('date', ['date']);
    

    然后您可以像这样检查表中某个日期的存在:

    if (!table.where([{ date: myDate }]).length) {....}