Функция приведения объектов к единому виду

В исходной функции name проверяется раньше объединения имени и фамилии, поэтому запись person теряет lastname. Сначала обработайте специальную форму person.

Короткий ответ

Что ответить на собеседовании

В исходной функции name проверяется раньше объединения имени и фамилии, поэтому запись person теряет lastname. Сначала обработайте специальную форму person.

Подробный разбор

Ответ с пояснениями

Условие

Создайте функцию, принимающую массив объектов и возвращающую массив объектов с одинаковой структурой.

 const items = [
    { id: 1, name: "siberia can code 💬" },
    { id: 2, body: { name: "siberia can code 💬" } },
    { id: 3, type: "person", name: "siberia", lastname: "can code 💬" }
];

const normalize = (items) => items.map(elem => {
    return {
        id: elem.id,
        name: elem.name || elem.body?.name || `${elem.name} ${elem.lastname}`
    };
});

// Ожидаемый результат:
// [
//     { id: 1, name: "siberia can code 💬" },
//     { id: 2, name: "siberia can code 💬" },
//     { id: 3, name: "siberia can code 💬" }
// ]

Ответ

В исходной функции name проверяется раньше объединения имени и фамилии, поэтому запись person теряет lastname. Сначала обработайте специальную форму person.

const normalize = items => items.map(item => ({
  id: item.id,
  name: item.type === 'person'
    ? [item.name, item.lastname].filter(value => typeof value === 'string' && value !== '').join(' ')
    : item.name ?? item.body?.name ?? ''
}));

Для приведённых трёх объектов это даёт ожидаемый результат. Nullish coalescing не заменяет существующую пустую строку только из-за её falsy-значения; правила отсутствующих полей нужно согласовать отдельно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее