одна функция сортировки для разных массивов объекта в JavaScript - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу отсортировать оба массива с помощью одной функции сортировки запятых, которая может сортировать по дате.

videos = [
    {publishDate: new Date("2016-07-20T07:45:00Z").toISOString()}, 
    {publishDate: new Date("2016-07-27T07:45:00Z").toISOString()}, 
    {publishDate: new Date("2016-07-23T07:45:00Z").toISOString()}
];

persons = [
    {dob: new Date("2016-07-10T07:45:00Z").toISOString()}, 
    {dob: new Date("2016-07-08T07:45:00Z").toISOString()}, 
    {dob: new Date("2016-07-11T07:45:00Z").toISOString()}
];

Я могу отсортировать с помощью этой функции byDate ()

function byDate(v1, v2) {
    return v1.p > v2.p ? 1 : -1;
}

videos.sort(byDate);

, но когдаЯ вызываю эту функцию с массивом Person [], это дает ошибку, потому что v1.p отсутствует в массиве Person [].

Итак, мне нужна одна функция сортировки, которая может сортировать разные массивы объектов.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

просто попробуйте,

    videos = [
        {publishDate: new Date("2016-07-20T07:45:00Z").toISOString()}, 
        {publishDate: new Date("2016-07-27T07:45:00Z").toISOString()}, 
        {publishDate: new Date("2016-07-23T07:45:00Z").toISOString()}
    ];
    
    persons = [
        {dob: new Date("2016-07-10T07:45:00Z").toISOString()}, 
        {dob: new Date("2016-07-08T07:45:00Z").toISOString()}, 
        {dob: new Date("2016-07-11T07:45:00Z").toISOString()}
    ];
    
    function byDate(v1, v2) {
        return Object.values(v1) > Object.values(v2) ? 1 : -1;
    }
    
    console.log(videos.sort(byDate));
    console.log(persons.sort(byDate));
0 голосов
/ 30 ноября 2018

Вам необходимо указать ключ, который вы хотите отсортировать.Это решение берет ключ и возвращает функцию для сортировки.

function byDate(key) {
    return function (a, b) {
        return a[key].localeCompare(b[key]);
    };
}

var videos = [{ publishDate: new Date("2016-07-20T07:45:00Z").toISOString() }, { publishDate: new Date("2016-07-27T07:45:00Z").toISOString() }, { publishDate: new Date("2016-07-23T07:45:00Z").toISOString() }],
    persons = [{ dob: new Date("2016-07-10T07:45:00Z").toISOString() }, { dob: new Date("2016-07-08T07:45:00Z").toISOString() }, { dob: new Date("2016-07-11T07:45:00Z").toISOString() }];

console.log(videos.sort(byDate('publishDate')));
console.log(persons.sort(byDate('dob')));
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...