Как будем определять, надо ли отправить элемент в конец массива:
const checkItem = item => item.status === 'выполнено';
Изменяем существующий массив:
arr.sort((a, b) => +checkItem(a) || -checkItem(b));
// или
arr.reduceRight((_, n, i, a) => checkItem(n) && a.push(a.splice(i, 1)[0]), null);
// или
arr
.reduce((acc, n, i) => (
arr[i - acc.length] = n,
checkItem(n) && acc.push(n),
acc
), [])
.forEach((n, i, a) => arr[arr.length - a.length + i] = n);
Создаём новый:
const newArr = arr
.reduce((acc, n) => (
acc[+checkItem(n)].push(n),
acc
), [ [], [] ])
.flat();
// или
const newArr = arr.reduce((acc, n) => (
acc[checkItem(n) ? 'push' : 'unshift'](n),
acc
), []);
// или
const newArr = [
...arr.filter(n => !checkItem(n)),
...arr.filter(checkItem),
];