如何按日期对数组进行排序,但缺少第一个数组项

时间:2019-06-18 21:17:04

标签: javascript arrays date object

我想按日期对数组进行排序。但是忽略数组中的第一项。任何帮助将不胜感激。

我目前有这个:

articles.sort(function(a,b){
    return new Date(b.published) - new Date(a.published);
});

我的数组如下:

[
    {id: 1, published: Mar 12 2012 08:00:00 AM}, 
    {id: 2, published: Mar 9 2012 08:00:00 AM},
    {id: 3, published: Mar 15 2012 08:00:00 AM},
    {id: 4, published: Mar 22 2012 08:00:00 AM},
    {id: 5, published: Mar 8 2012 08:00:00 AM}
];

我只需要按ID 2-5中的日期对所有内容进行排序

我所拥有的一切都可以排序。

谢谢

4 个答案:

答案 0 :(得分:1)

如果id:11相匹配,您可以通过返回id来从Array.sort中排除1

let dates = [ {id: 1, published: 'Mar 12 2012 08:00:00 AM'}, {id: 2, published: 'Mar 9 2012 08:00:00 AM'}, {id: 3, published: 'Mar 15 2012 08:00:00 AM'}, {id: 4, published: 'Mar 22 2012 08:00:00 AM'}, {id: 5, published: 'Mar 8 2012 08:00:00 AM'} ];

let result = dates.sort((a,b) => 
   a.id == 1 || b.id == 1 ? 1 : new Date(a.published) - new Date(b.published))

console.log(result)

这样,您将不需要concatsliceshift任何东西。

答案 1 :(得分:0)

要忽略数组中的第一项,请在sort d数组中使用slice,然后与第一项合并。另外请注意,时间戳记必须为字符串-当前无效。

const articles = [{id:1,published:"Mar 12 2012 08:00:0 AM"},{id:2,published:"Mar 9 2012 08:00:0 AM"},{id:3,published:"Mar 15 2012 08:00:0 AM"},{id:4,published:"Mar 22 2012 08:00:0 AM"},{id:5,published:"Mar 8 2012 08:00:0 AM"}];
const res = [].concat(articles[0], articles.slice(1).sort(({ published: a }, { published: b }) => new Date(a) - new Date(b)));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

答案 2 :(得分:0)

然后,您可以移动第一行,并在排序后读取。

strace -o curl.out curl www.google.com
strace -o dig.out dig www.google.com

grep libresolv *.out
grep libbind *.out

答案 3 :(得分:0)

使用shift()删除第一个元素,然后使用unshift()将其放回第一位置:

var first = articles.shift();
articles.sort(function(a,b){
    return new Date(b.published) - new Date(a.published);
});
articles.unshift(first);