Как написать валидатор уникального имени строки?

Проверьте тип и непустое нормализованное имя, затем ищите совпадение только среди строк с другим id. Для своего прежнего имени результат должен быть undefined.

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

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

Проверьте тип и непустое нормализованное имя, затем ищите совпадение только среди строк с другим id. Для своего прежнего имени результат должен быть undefined.

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

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

Условие

Даны type Row = { id: number; name: string } и строки [{id:1,name:'A'},{id:2,name:'B'}]. Validator имеет тип (value: unknown) => string | undefined. При редактировании name нужно запретить пустую строку и совпадение имени с другой строкой после trim и приведения к нижнему регистру. Текущая строка исключается по id.

Ответ

Проверьте тип и непустое нормализованное имя, затем ищите совпадение только среди строк с другим id. Для своего прежнего имени результат должен быть undefined.

function nameValidator(rows: Row[], editedId: number): Validator {
  return value => {
    if (typeof value !== 'string' || !value.trim()) return 'Введите имя';
    const key = value.trim().toLowerCase();
    return rows.some(row => row.id !== editedId &&
      row.name.trim().toLowerCase() === key) ? 'Имя уже занято' : undefined;
  };
}

Редактирование строки 1 со значением ' A ' проходит, с 'b' — возвращает ошибку. Для серверного сохранения такую проверку повторяют на backend: клиентская проверка не защищает от параллельных изменений.

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

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

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

Подробнее