В исходной функции 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-значения; правила отсутствующих полей нужно согласовать отдельно.