#javascript
#javascript
Вопрос:
Есть ли способ упростить этот оператор if. Я нахожусь в этом senario много и хочу сделать его чище.
if (item === 'christie' || item === 'chris') {
return 'christine';
}
if (item === 'maddy' || item === 'madison') {
return 'madeline';
}
return '';
Я создал пример ради вопроса, но есть ли более простой способ?
Комментарии:
1. Возможно, вы предпочтете
switch
оператор с ошибками.
Ответ №1:
Немного дольше, но легче быстро понять, что происходит. По крайней мере, по моему мнению.
switch(item) {
case 'christie':
case 'chris':
return 'christine';
case 'maddy':
case 'madison':
return 'madeline';
default:
return '';
}
Вот еще один вариант, использующий includes
if(['christie','chris'].includes(item)) {
return 'christine';
}
if(['maddy','madison'].includes(item)) {
return 'madeline';
}
return '';
Ответ №2:
Один из вариантов предполагает, что предоставленные вами имена являются единственными параметрами имени, а возвращаемое значение соответствует префиксу.
return item.startsWith('chr') ? 'christine' : item.startsWith('mad') ? 'madeline' : '';
Если вы хотите остаться, if
вы можете использовать:
if (item.startsWith('chr')) return 'christine';
if (item.startsWith('mad')) return 'madeline';
return '';
Комментарии:
1. Это будет работать, только если входные данные всегда находятся в этих четырех именах, но будет определять
madness
asmadeline
иchrome
aschristine
…2. Правильно, и я четко сделал это предположение в первой строке. Это решение предназначено только для того, чтобы дать представление о дальнейшей оптимизации.
Ответ №3:
Вы можете использовать оператор switch
function switch_names(item) {
switch (item) {
case "christie":
case "chris":
return "christine";
case "maddy":
case "madison":
return "madeline";
default:
return "";
}
}
const name=switch_names("chris")
console.log(name)
Ответ №4:
В зависимости от варианта использования может быть проще сделать что-то вроде следующего:
const name_map = {
'christie': 'christine',
'chris': 'christine',
'maddy': 'madeline',
'madison': 'madeline',
};
const map_name = (name) => name_map[name] ? name_map[name] : name;
console.log('christie', map_name('christie'));
console.log('christine', map_name('christine'));
console.log('maddy', map_name('maddy'));
Если вы хотите указать связь имен наоборот, вы, вероятно, могли бы сделать что-то вроде:
const name_map = {
'christine': ['christie', 'chris'],
'madeline': ['maddy', 'madison'],
};
const flip = (obj) => Object.entries(obj)
.reduce(
(acc1, [name, alts]) => alts.reduce(
(acc2, alt) => ({ ...acc2, [alt]: name }),
acc1
),
{}
)
const flipped_name_map = flip(name_map);
const map_name = (name) => flipped_name_map[name] ? flipped_name_map[name] : name;
console.log('christie', map_name('christie'));
console.log('christine', map_name('christine'));
console.log('maddy', map_name('maddy'));
console.log('madison', map_name('madison'));
Ответ №5:
if (item === 'christie' || item === 'chris' ||item === 'maddy' || item === 'madison')
{
return item;
}
return '';
Ваш пост был очень неясным, чего именно вы хотите?
Комментарии:
1. Не совсем. Операционная система хочет сопоставить
'christie'
и'chris'
с'christine'
и'maddy'
и'madison'
сmadeline
…