如何将这个if-else转换为switchcase



在开发过程中,函数出现lint错误

Do not nest ternary expressions.eslintno-nested-ternary

如何将下面的函数转换为switchcase?或者其他任何我解决es lint错误的方法?

getDaySuffix = day => (day === (1 || 21 || 31) ? 'st' : day === (2 || 22) ? 'nd' : day === (3 || 23) ? 'rd' : 'th');

还有谁能帮我这个功能吗?在下面的功能中,我得到了的错误

Assignment to property of function parameter 'carry'.

如何使用以下函数解决上述错误?如何在不更改函数逻辑的情况下重写函数?并解决esint错误。

const filter = selectedFilter[0].conditions.reduce(
(carry, current) => {
if (current.field === 'access_group_uuid') {
// eslint-disable-next-line in next line getting error at carry
carry[current.field] = (carry[current.field] || []).concat(
current.value,
);
} else {
// eslint-disable-next-line in next line getting error at carry
carry[current.field] = carry[current.field] ?
[carry[current.field], current.value] :
current.value;
}
return carry;
}, {},
);

编辑——用于第二个函数,示例为

const data = { 
executed:[
{_id: "5f23d394cd 480e300", field: "name", value: "Jolly", operator: "equal"},
{_id: "5f30d39f4cd8d0e301", field: "status", value: "EXPIRED", operator: "equal"},
{_id: "5f230d39001480e302", field: "grp", value: "874-3-11-4-56", operator: "equal"},
{_id: "59f4cd8d001480e303", field: "grp", value: "873-5-12-4-77", operator: "equal"}
],
created_at: "2020-07-30T18:11:05.992Z",
name: "Kind Find",
_id: "1f230d39f4cd8d441480e2dd"
}
console.log(
data.executed.reduce((carry, current) => {
if (current.field === 'grp') {
// eslint-disable-next-line no-param-reassig
carry[current.field] = (carry[current.field] || []).concat(current.value);
} else {
// eslint-disable-next-line no-param-reassig
carry[current.field] = carry[current.field] ? [carry[current.field], current.value] : current.value;
}
return carry;
}, {})
);

您可以使用对象查找来代替切换:

const getSuffix = day => {
const map = {
'1': 'st',
'21': 'st',
'31': 'st',
'2': 'nd',
'22': 'nd',
'3': 'rd',
'23': 'rd'
};
return map[day] || 'th';
}

但是,如果您正在寻找顺序指示符转换,您可以使用Intl.PluralRules来实现:

const pr = new Intl.PluralRules('en-US', { type: 'ordinal' });
const map = {
other: 'th',
one: 'st',
two: 'nd',
few: 'rd',
};
const ordinal = num => num + map[pr.select(num)];

console.log(ordinal(1));
console.log(ordinal(2));
console.log(ordinal(3));
console.log(ordinal(13));
console.log(ordinal(24));
console.log(ordinal(42));


对于第二个函数,您可以将三元表达式转换为ifelse:

const filter = selectedFilter[0].conditions.reduce((carry, current) => {
if (current.field === 'access_group_uuid') {
// eslint-disable-next-line in next line getting error at carry
if (!carry[current.field]) {
carry[current.field] = [];
}
carry[current.field] = carry[current.field].concat(current.value);
} else {
// eslint-disable-next-line in next line getting error at carry
if (carry[current.field]) {
carry[current.field] = [carry[current.field], current.value];
} else {
carry[current.field] = current.value;
}
}
return carry;
}, {});

这是一个简单的切换案例解决方案:

switch (day) {
case 1: case 21: case 31:
getDaySuffix = 'st';
break;
case 2: case 22:
getDaySuffix = 'nd';
break;
case 3: case 23:
getDaySuffix = 'rd';
break;
default:
getDaySuffix = 'th';
}

我认为拥有自己的函数来做同样的工作更有效。

const nth = function(val) {
var d = +val.toString().split('').pop();
if (d > 3 && d < 21) return 'th';
switch (d % 10) {
case 1:  return "st";
case 2:  return "nd";
case 3:  return "rd";
default: return "th";
}
}
var day = 23;
console.log(`${day}${nth(day)}`);

这里,第n个函数将day作为参数,并将day后缀作为字符串返回。所以你可以更灵活地使用它。只需输入一天,并将后缀作为字符串。

快乐编码:(

最新更新