Что выведет код Middle Современный синтаксис обновлено

Object.groupBy и объект без прототипа

Вопрос

Что выведет код? По строке на каждый вывод.

const users = [
  { n: 'Аня', role: 'admin' },
  { n: 'Оля', role: 'user' },
  { n: 'Катя', role: 'admin' },
];
const groups = Object.groupBy(users, (u) => u.role);
console.log(groups.admin.map((u) => u.n).join(','));
console.log(Object.keys(groups).join(','));
console.log(typeof groups.hasOwnProperty);
const { admin, ...others } = groups;
console.log(Object.keys(others).join(','));

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: Аня,Катя, admin,user, undefined, user. Object.groupBy раскладывает элементы по ключам, которые вернул колбэк, сохраняя порядок: в admin попадают Аня и Катя.

Что выведет

Аня,Катя
admin,user
undefined
user

Разбор

Object.groupBy раскладывает элементы по ключам, которые вернул колбэк, сохраняя порядок: в admin попадают Аня и Катя. Ключи групп идут в порядке первого появления: admin,user. Результат создаётся без прототипа, поэтому унаследованного hasOwnProperty нет: undefined. Rest при деструктуризации собирает оставшиеся собственные ключи: user.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме