Как отсортировать массив по дате, но пропустить первый элемент массива - PullRequest
0 голосов
/ 19 июня 2019

Я хочу отсортировать массив по дате.Но игнорируйте первый элемент в массиве.Любая помощь будет высоко ценится.

У меня есть это в настоящее время:

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 ]

1 голос
/ 19 июня 2019

Вы можете просто исключить id:1 из вашего Array.sort , возвращая 1, если id соответствует 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)

Таким образом, вам не нужно ничего concat, slice или shift.

0 голосов
/ 19 июня 2019

Затем вы можете сдвинуть первую строку и прочитать после сортировки.

var articles = [
    {id: 1, published: "2018-01-09"}, 
    {id: 2, published: "2019-01-01"},
    {id: 3, published: "2019-01-04"},
    {id: 4, published: "2019-01-03"},
    {id: 5, published: "2019-01-02"}
];
var first = articles.shift();
articles.sort((a, b) => {
    return new Date(b.published) - new Date(a.published);
});
articles.unshift(first);
console.log(articles);
0 голосов
/ 19 июня 2019

Используйте shift(), чтобы удалить первый элемент, и unshift(), чтобы вернуть его на первую позицию:

var first = articles.shift();
articles.sort(function(a,b){
    return new Date(b.published) - new Date(a.published);
});
articles.unshift(first);
0 голосов
/ 19 июня 2019

Чтобы игнорировать первый элемент в массиве, sort в массиве slice d, а затем объединить с первым элементом. Также обратите внимание, что отметка времени должна быть строкой - в настоящее время она недействительна.

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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...