Храните признак закрепления по стабильному ID сайта и сортируйте закреплённые элементы перед остальными. Переключение должно обновлять состояние, не изменяя исходный массив напрямую.
Реализуйте одну или обе функции в приложении: пользователь может закреплять и откреплять сайты иконкой в списке; закреплённые сайты должны отображаться вверху списка. Вторую функцию можно выбрать по своему усмотрению.
Храните признак закрепления по стабильному ID сайта и сортируйте закреплённые элементы перед остальными. Переключение должно обновлять состояние, не изменяя исходный массив напрямую.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Храните признак закрепления по стабильному ID сайта и сортируйте закреплённые элементы перед остальными. Переключение должно обновлять состояние, не изменяя исходный массив напрямую.
Пример преобразований без привязки к UI:
function togglePin(sites, id) {
return sites.map(site => site.id === id
? { ...site, pinned: !site.pinned } : site);
}
function orderedSites(sites) {
return sites.map((site, index) => ({ site, index }))
.sort((a, b) => Number(b.site.pinned) - Number(a.site.pinned)
|| a.index - b.index)
.map(entry => entry.site);
}
Иконке нужны доступное имя и aria-pressed. Для сохранения между входами используйте серверные настройки, для локального прототипа — localStorage. Вторую функцию условие разрешает не реализовывать.