【问题标题】:Filter function not working for Date (javascript)过滤功能不适用于日期(javascript)
【发布时间】:2017-07-17 13:47:02
【问题描述】:

我已尝试按设定日期过滤数组

var di = new Date(this.state.date.slice(0, 4),
                  this.state.date.slice(5, 7),
                  this.state.date.slice(8, 10),
                  '10',
                  '00');
var result2 = result.filter(function(number) {
  return (number[2] == di)
});

但结果是一个空数组 (result2)。

下面是console.log(di)和数组的一个元素的截图-

【问题讨论】:

  • 结果中的空数组

标签: javascript arrays filter


【解决方案1】:

您不能使用 == 在 javascript 中比较两个不同的对象 这将返回 true 仅比较对象的同一实例。

要使您的代码正常工作,您可以尝试将日期转换为字符串。

var result2 = result.filter(function(number) {
  return (number[2].toString() == di.toString())
});

或者使用 Date 对象的 .getTime() 方法

var result2 = result.filter(function(number) {
  return (number[2].getTime() == di.getTime())
});

【讨论】:

    【解决方案2】:

    filter 函数的第一个参数是一个数组元素,而不是数组本身,所以应该是:

    result.filter( function(el) { return (el == di); } );
    

    【讨论】:

    • 请更具体一些,发布一个完整的例子,然后尝试先阅读一些文档。
    • @kenh it 一个完整的例子,只是你没有正确阅读。
    • @PatrickRoberts result 在他的示例中没有定义,所以在我看来它并不完整。此外,还不清楚传递给 Date 构造函数的内容是什么,因为他没有显示 this.state.date 是什么。
    • @kjh 传入Date() 的内容无关紧要,因为记录了di,并且result 中的元素架构实际上已经给出了,两者在屏幕截图中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多