uranik
@uranik

Как сделать чередование ассоциативного массива?

Есть ассоциативный массив, например let am = {'8357':'m','5172':'m','3115':'f','5743':'f'};
Надо создать массив с чередованием по значению m,f,m,f,m,f и т.д. чтобы получилось {'8357':'m','3115':'f','5172':'m','5743':'f'}
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 2
dollar
@dollar
Делай добро и бросай его в воду.
Как сделать чередование ассоциативного массива?

Разбить на два ассоциативных массива.
И в конкретном месте, где требуется чередование, брать то из одного "массива", то из другого.
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Для примера подойдёт и упрощение структуры. Гипотезы:
  1. равное число элементов f и m и других нет
  2. свойство только одно – этот самый 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" ]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы