日期筛选函数无法正常工作(JavaScript)

3

我试图按照一个给定的日期筛选一个数组

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) 的截图和数组中的一个元素 -

enter image description here


结果中的空数组 - Егор Кротенко
2个回答

6
你不能使用==在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())
});

-3

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

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

请更具体地说明,发布一个完整的示例,并尝试先阅读一些文档。 - kjh
2
@kenh 这是一个完整的例子,你只是没有仔细阅读它。 - Patrick Roberts
1
@PatrickRoberts 在他的示例中未定义 result,因此我认为它不完整。此外,由于他没有显示 this.state.date 是什么,所以传递到 Date 构造函数中的内容不清楚。 - kjh
@kjh 传递给 Date() 的内容是无关紧要的,因为已经记录了 di,而 result 中元素的模式实际上已经在截图中给出。 - Patrick Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接