Первые два значения проходят, '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)). Если не исключать свою запись, любое сохранение без изменения имени окажется ошибочным. Сравнение только с исходной строкой тоже недостаточно: данные другой строки могли измениться. На сервере при сохранении повторяют проверку с тем же правилом нормализации и защитой от гонки.