Javascript 在momentjs中重用日期对象

Javascript 在momentjs中重用日期对象,javascript,filter,momentjs,Javascript,Filter,Momentjs,我有一个正在过滤的Javascript集合。在回调中,我实例化了一个新的moment对象,它破坏了过滤函数 var today = new moment().format('YYYY-MM-DD'); return this.collection.filter((vocab) => { let benchmarkDate = new moment(vocab.interval_benchmark_date).format(); return benchmarkDate.isAft

我有一个正在过滤的Javascript集合。在回调中,我实例化了一个新的
moment
对象,它破坏了过滤函数

var today = new moment().format('YYYY-MM-DD');
return this.collection.filter((vocab) => {
  let benchmarkDate = new moment(vocab.interval_benchmark_date).format();

  return benchmarkDate.isAfter(today);
});
是否可以在筛选器之前实例化
时刻
对象,然后在筛选器回调的每次迭代中重用它,并使用每个新日期重置它?

TLDR-从
中删除
.format()
让benchmarkDate=新时刻(vocab.interval\u benchmark\u date).format()和您的筛选应该再次工作
.format()
创建一个日期字符串值,而不是像以前那样创建一个矩对象,因此它无法访问原始矩方法,如
.isAfter()

是否可以在筛选器之前实例化矩对象,然后在筛选器回调的每次迭代中重用它,或者使用每个新日期重置它

是的,您当然应该这样做,因为大量使用的
moment()
(可能是这样的循环)会带来不菲的成本,最终可能会成为性能瓶颈。调用的
moment()
越少越好。可以在任何地方重复使用(使用.add()等进行修改时除外,因为矩会直接改变数据)

然而,在这里的特定实例中,您对不同日期/时间信息的迭代产生了不同的时刻,您可以通过在每次迭代中改变相同的时刻(通过使用
.reduce()
方法持续处理以前的结果)来避免这种情况


另外,您正在执行
let benchmarkDate=…format()
,这将创建一个
字符串
,然后您尝试在其上运行
.isAfter()
,但它将不存在,因为它不再是
时刻
对象。由于
.format()
的结果未被使用,因此您可以将其删除,这样就可以了


哦,
moment()
函数不需要
new
关键字来返回对象