В выписке Альфа-Бизнес таблицу сортируют кликом по заголовкам: сначала по контрагенту, внутри — по сумме по убыванию. У части операций контрагента нет (комиссии банка).
Напишите sortRows(rows, spec). spec — массив { key, dir }, dir — 'asc' или 'desc'. Строки сравниваются через localeCompare(…, 'ru'), числа — как числа. Если по первой колонке равенство, решает вторая и так далее; при полном равенстве сохраняется исходный порядок.
null и undefined в колонке всегда уходят в конец, при любом направлении. Вернуть новый массив, rows не менять.
В работе: Выписка на 3 000 операций за квартал: бухгалтер сортирует по контрагенту и сумме перед сверкой.
Пример 1: контрагент, внутри сумма по убыванию
[{"id": 1, "who": "Ромашка", "sum": 500}, {"id": 2, "who": "Альфа-Лизинг", "sum": 1200}, {"id": 3, "who": "Ромашка", "sum": 9000}, {"id": 4, "who": "Альфа-Лизинг", "sum": 300}], [{"key": "who", "dir": "asc"}, {"key": "sum", "dir": "desc"}]{"ids": [2, 4, 3, 1], "same": false, "untouched": true}Пример 2: пустые в конце при asc
[{"id": 1, "who": null, "sum": 50}, {"id": 2, "who": "Берёзка", "sum": 10}, {"id": 3, "who": "Астра", "sum": 20}], [{"key": "who", "dir": "asc"}]{"ids": [3, 2, 1], "same": false, "untouched": true}sortRows — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 8: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function sortRows(rows, spec) // → новый массив
Источник: на задачах Альфа-Банка: выписка по счёту в интернет-банке. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.