Array.sort
изменяет массив, где использование Array.reduce
поощряет чистую функцию. Вы можете клонировать массив перед сортировкой.
Я полагаю, что этот вопрос предназначен для того, чтобы заставить вас думать иначе, применяя ограничения. Он проверяет ваши знания о том, как работает reduce
, и, как показывают ответы, существует много способов убрать кошку. Это покажет ваш личный вкус JS в решении этого.
Я решил использовать Array.findIndex
и Array.splice
.
const sortingReducer = (accumulator, value) => {
const nextIndex = accumulator.findIndex(i => value < i );
const index = nextIndex > -1 ? nextIndex : accumulator.length;
accumulator.splice(index, 0, value);
return accumulator;
}
const input = [5,4,9,1];
const output = input.reduce(sortingReducer, []);
Тестирование с вводом пробы дает
arr.reduce(sortingReducer, [])
// (17) [0, 3, 4, 4, 6, 7, 8, 11, 13, 23, 24, 52, 54, 59, 87, 91, 98]