Сначала обработайте 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; если пустое имя считается отсутствующим, это правило нужно добавить явно.