Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用对象日期属性对数组排序_Javascript_Reactjs_Typescript - Fatal编程技术网

Javascript 使用对象日期属性对数组排序

Javascript 使用对象日期属性对数组排序,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我有一个包含如下对象的数组: { Title: "Title", Url: "myUrl", publishedDate: "19/01/2021" }, { Title: "Title 2", Url: "myUrl", publishedDate: "17/12/2020" }, { Title: "Title 3", U

我有一个包含如下对象的数组:

{
 Title: "Title",
 Url: "myUrl",
 publishedDate: "19/01/2021"
  },
  {
   Title: "Title 2",
Url: "myUrl",
publishedDate: "17/12/2020"
  },
  {
  Title: "Title 3",
Url: "myUrl",
publishedDate: "11/03/2021"
  },
  {
Title: "Title 4",
Url: "myUrl",
publishedDate: "11/12/2020"
  }
我已将它们保存在我的状态(数组)

我想根据属性“publishedDate”(由于内存效率的原因,不使用新的日期())对对象进行排序。我尝试:

但是这些物体不整齐。代码中有什么错误?游乐场:


您可以使用Date.UTC方法,该方法接受年、月索引、日来创建日期,并通过解析输入日期字符串传递这些值,如下所示:

this.state={data:[{Title:“Title”,Url:“myUrl”,publishedDate:“19/01/2021”},{Title:“Title 2”,Url:“myUrl”,publishedDate:“17/12/2020”},{Title:“Title 3”,Url:“myUrl”,publishedDate:“11/03/2021”},{Title:“Title 4”,Url:“myUrl”,publishedDate:“11/12/2020”};
console.log(this.state.data.sort(函数a,b){
var c=Date.UTC(a.publishedDate.split(“/”[2],a.publishedDate.split(“/”[1])-1,a.publishedDate.split(“/”[0]);
var d=Date.UTC(b.publishedDate.split(“/”[2],b.publishedDate.split(“/”[1])-1,b.publishedDate.split(“/”[0]);
返回c-d;

}))
如果日期格式始终相同,您只需以
YYYYMMDD
格式创建字符串,然后进行比较-

var数据=[{
标题:“标题”,
Url:“我的Url”,
发布日期:“19/01/2021”
}, {
标题:“标题2”,
Url:“我的Url”,
发布日期:“17/12/2020”
}, {
标题:“标题3”,
Url:“我的Url”,
发布日期:“11/03/2021”
}, {
标题:“标题4”,
Url:“我的Url”,
发布日期:“11/12/2020”
}]
var sortedData=data.sort(函数(a,b){
a=a.publishedDate.split('/').reverse().join('');
b=b.publishedDate.split('/').reverse().join('');
返回a>b1:a控制台日志(sortedData)
“由于内存效率,没有使用新日期()”——“为什么
新日期()
会成为问题?因为在排序函数中分配内存。这里已经讨论过了:你自己尝试过解决这个问题吗?将日期拆分为各个部分并进行比较应该不会那么困难。如果您可以这样做,只需编写自己的compareDates函数和good to go。用“/”作为分隔符,将日期分成三部分。只有一条注释,没有任何进一步的事实来证明其假设。如果不使用分析器进行详尽的分析,你真的不应该考虑“内存效率”。Andreas说得好,谢谢
Date.UTC()
在“内存效率”方面没有太大变化,但“限制”一开始就毫无意义……我想这只是另一种方式,如果OP希望避免新的Date(),我没问题:-)@Andreas“但这种“限制”一开始就毫无意义。”我想你对我的申请很了解我不明白你为什么要这样“监视”周围,这对我来说毫无意义,而且这不是我第一次看到你这样。
this.state.data
console.log(this.state.data.sort(function(a, b) {
  var c = new Date(a.publishedDate);
  var d = new Date(b.publishedDate);
  return c.getTime() - d.getTime();
}))