JS: алгоритм группировки дат по годам и месяцам в дереве - PullRequest
1 голос
/ 18 февраля 2020

У меня есть список таких дат:

2019-12-15
2020-01-15
2020-01-23

Я хочу представить их в дереве примерно так:

2019
  |__12
     |__15
2020
  |__01
     |__15
     |__23

есть ли алгоритм, который может помочь достичь этого с хорошей производительностью? потому что список дат может стать больше, и я боюсь столкнуться с медленным алгоритмом разбора.
Заранее спасибо.

1 Ответ

1 голос
/ 18 февраля 2020

Вы можете взять объект и получить детали для вложенных объектов, проверив свойство и получить это свойство или добавить новый объект в качестве свойства.

var data = ['2019-12-15', '2020-01-15', '2020-01-23'],
    tree = data.reduce((t, s) => {
        s.split('-').reduce((o, k) => o[k] = o[k] || {}, t);
        return t;
    }, {});

console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Быстрый подход.

var data = ['2019-12-15', '2020-01-15', '2020-01-23'],
    tree = {};

for (const date of data) {
    let temp = tree;
    for (const key of date.split('-')) {
        if (!temp[key]) temp[key] = {};
        temp = temp[key];
    }
}

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