Это много синтаксического шума, который не выполняет sh ничего, чего не могут сделать простые if
/ else
операторы. Излишне подробный код приводит к увеличению площади поверхности для ошибок, которых следует по возможности избегать. Как правило, исключения должны быть исключительные для случаев, когда обычных проверок в текущей функции будет недостаточно.
Вы уже используете if
/ else
- вместо броска, а затем перехватывая в дополнение , просто поместите нужный логик c в if
/ else
.
Вы также можете использовать .some
, чтобы проверить, если пользователь с такое же имя пользователя уже существует в массиве.
function errorCheck(newUsers) {
const accepted = [];
const rejected = [];
for (const user of newUsers) {
let status = true;
if (accepted.some(({ username }) => user.username === username)) {
status = false;
console.log(`ERROR: Username (${user.username}) already exists`)
}
if (/\W/.test(user.username)) {
status = false;
console.log(`ERROR: Username (${user.username}) the username cannot contain spaces or special characters`)
}
if (/\W/.test(user.first) || /\W/.test(user.last)) {
status = false;
console.log(`ERROR: Username (${user.username}) first/last name cannot contain spaces or special characters`)
}
if (user.age < 21) {
status = false;
console.log(`ERROR: Username (${user.username}) must be 21 years old`);
}
(status ? accepted : rejected).push(user);
}
return [accepted, rejected];
}
Исключения может быть полезным для потока управления, но только когда обычные инструменты для потока управления не будут достаточно хорошо.