Приведение массива объектов к единому формату

Сначала обработайте type === 'person', иначе существующий name завершит цепочку || и фамилия не попадёт в результат.

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

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

Сначала обработайте type === 'person', иначе существующий name завершит цепочку || и фамилия не попадёт в результат.

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

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

Условие

Необходимо реализовать функцию, принимающую массив объектов и возвращающую новый массив, где каждый элемент приведён к единой структуре. В качестве примера используется следующий набор данных:

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

const flatData = (data) => data.map(item => {
    return {
        id: item.id,
        name: item.name || item.body?.name || `${item.name} ${item.lastname}`
    };
});

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

Ответ

Сначала обработайте type === 'person', иначе существующий name завершит цепочку || и фамилия не попадёт в результат.

const flatData = data => data.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 и не попадает в захват экрана.

Подробнее