Как не считать исходное имя строки конфликтом уникальности?

Первые два значения проходят, 'Beta' даёт ошибку уникальности. Поиск совпадения должен исключать текущую строку по стабильному id, а не по позиции в массиве.

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

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

Первые два значения проходят, 'Beta' даёт ошибку уникальности. Поиск совпадения должен исключать текущую строку по стабильному id, а не по позиции в массиве.

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

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

Условие

Редактируется строка {id:1,name:'Alpha'} в наборе с {id:2,name:'Beta'}. Валидатор сравнивает имена после trim и lower-case. Нужно разрешить сохранение прежнего имени и запретить совпадение с другой строкой. Что вернут проверки 'Alpha', ' alpha ' и 'Beta'?

Ответ

Первые два значения проходят, 'Beta' даёт ошибку уникальности. Поиск совпадения должен исключать текущую строку по стабильному id, а не по позиции в массиве.

Предикат конфликта: rows.some(row => row.id !== editedId && normalize(row.name) === normalize(value)). Если не исключать свою запись, любое сохранение без изменения имени окажется ошибочным. Сравнение только с исходной строкой тоже недостаточно: данные другой строки могли измениться. На сервере при сохранении повторяют проверку с тем же правилом нормализации и защитой от гонки.

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

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

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

Подробнее