Для примера подойдёт и упрощение структуры. Гипотезы:
- равное число элементов f и m и других нет
- свойство только одно – этот самый f или m.
Так можно на выходе сформировать просто массив значений ключей и «договориться», что четные это m, нечётные f.
let am = {'8357':'m','5172':'m','3115':'f','5743':'f'};
const mf = { m: [], f: [] };
for (item of Object.entries(am)) {
mf[item[1]].push(item[0]);
}
if (mf.m.length !== mf.f.length) throw "Гендерный дисбаланс!";
const result = mf.m.reduce((acc, c, i) => (acc.push(c, mf.f[i]), acc), []);
// [ "5172", "3115", "8357", "5743" ]