Чередование максимальных, минимальных значений в массиве

Здравствуйте товарищи программисты! Задача с Codewars,7 kyu.Max-min arrays.

Предоставлен массив уникальных элементов.

Задача: переупорядочить значения так, чтобы за первым максимальным значением следовало первое минимальное значение, за которым следовало второе максимальное значение, затем второе минимальное значение и т. Д.

Перепробовал все что можно. Как следует это оформить ?

Исходный массив: [15,11,10,7,12]

Ожидаемый результат: [15,7,12,10,11]


Ответы (2 шт):

Автор решения: entithat

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]));

→ Ссылка
Автор решения: Roman
  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]))

→ Ссылка