Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Сортировка массива (https://javascript.ru/forum/dom-window/81473-sortirovka-massiva.html)

dc65k 02.12.2020 16:41

Сортировка массива
 
Всем привет, подскажите пожалуйста, как оптимизировать решение?

const arr = [
    { "date": "2019-07-31", "v": "5422" },
    { "date": "2019-06-30", "v": "5220" },
    { "date": "2019-05-31", "v": "5365" },
    { "date": "2019-08-31", "v": "5451" },
    { "date": "2019-09-30", "v": "5303" },
    { "date": "2020-03-31", "v": "5654" },
    { "date": "2019-10-31", "v": "5509" },
    { "date": "2019-12-31", "v": "5567" },
    { "date": "2020-01-31", "v": "5597" },
    { "date": "2019-11-30", "v": "5359" },
    { "date": "2020-02-28", "v": "5082" },
    { "date": "2020-04-14", "v": "2567" }
];

 /* result = {
    "2019": [
      "07-31",
      "08-22"
    ],
    "2020": [
      "01-01"
      "02-22"
    ]
  } */


Поправьте, где ошибся или как луче сделать?
const arr1 = [
    { "date": "2019-07-31", "v": "5422" },
    { "date": "2019-06-30", "v": "5220" },
    { "date": "2019-05-31", "v": "5365" },
    { "date": "2019-08-31", "v": "5451" },
    { "date": "2019-09-30", "v": "5303" },
    { "date": "2020-03-31", "v": "5654" },
    { "date": "2019-10-31", "v": "5509" },
    { "date": "2019-12-31", "v": "5567" },
    { "date": "2020-01-31", "v": "5597" },
    { "date": "2019-11-30", "v": "5359" },
    { "date": "2020-02-28", "v": "5082" },
    { "date": "2020-04-14", "v": "2567" }
];
function f(arr) {

    const dateList = operations.map((item) => {
        return new Date(item.date);
    }).sort(function(a, b) {
        return a - b;
    });

    let res = {};

    dateList.forEach(item => {

        if (!res[item.getFullYear()]) {
            res[item.getFullYear()] = [];
        }

        res[item.getFullYear()].push(`${item.getDate()}-${item.getMonth()}`)

    });

    return res;
}
console.log(f(arr1));

рони 02.12.2020 17:48

dc65k,
<pre>
  <script>
const arr = [
    { "date": "2017-07-31", "amount": "5422" },
    { "date": "2017-06-30", "amount": "5220" },
    { "date": "2017-05-31", "amount": "5365" },
    { "date": "2017-08-31", "amount": "5451" },
    { "date": "2017-09-30", "amount": "5303" },
    { "date": "2018-03-31", "amount": "5654" },
    { "date": "2017-10-31", "amount": "5509" },
    { "date": "2017-12-31", "amount": "5567" },
    { "date": "2018-01-31", "amount": "5597" },
    { "date": "2017-11-30", "amount": "5359" },
    { "date": "2018-02-28", "amount": "5082" },
    { "date": "2018-04-14", "amount": "2567" }
];

 /* result = {
    "2017": [
      "07-31",
      "08-22"
    ],
    "2018": [
      "01-01"
      "02-22"
    ]
  } */
let result = arr.reduce((obj, {date}) => {
let [year, month, data] = date.split(/\-/);
data = `${[month, data].join('-')}`;
obj[year] ? obj[year].push(data) : (obj[year]=[data]);
obj[year].sort();
return obj
}, {})
document.write(JSON.stringify(result, "", 4))
  </script>
</pre>

dc65k 06.12.2020 12:18

Спасибо.


Часовой пояс GMT +3, время: 14:21.