Чередование максимальных, минимальных значений в массиве
Здравствуйте товарищи программисты! Задача с Codewars,7 kyu.Max-min arrays.
Предоставлен массив уникальных элементов.
Задача: переупорядочить значения так, чтобы за первым максимальным значением следовало первое минимальное значение, за которым следовало второе максимальное значение, затем второе минимальное значение и т. Д.
Перепробовал все что можно. Как следует это оформить ?
Исходный массив: [15,11,10,7,12]
Ожидаемый результат: [15,7,12,10,11]
Ответы (2 шт):
const arr = [-4, 22, 3, 41, 5, 6].sort((a, b) => a - b);
console.log(arr.map((e, i) => arr[i % 2 === 0 ? arr.length - i / 2 - 1 : (i - 1) / 2]));
- Сортируем массив по убыванию
- Проходимся по массиву и пушим в
result(результирующий массив) либо первый элемент массива (тоесть максимальный), либо последний элемент массива (тоесть минимальный).
Здесь важно проходится по исходному массиву и при этом его не изменять, именно поэтому в третьей строке используется деструктуризация массива [...arr].sort((a,b)=>b-a) что дает возможность скопировать значения исходного массива в новый массив sorted. Если этого не сделать, то в массив sorted запишется ссылка на массив arr, и после изменения sorted изменится и исходный массив arr
function solve(arr){
const result = []
const sorted = [...arr].sort((a,b)=>b-a)
for(let i = 0; i < arr.length; i++) {
if(i % 2) {
result.push(sorted.pop())
} else {
result.push(sorted.shift())
}
}
return result
};
console.log(solve([15,11,10,7,12]))