Javascript 如何在状态间切换?
我寻找一种简短易读的方式来切换状态 例如,性别状态:m->f->n 现在我用两种方法Javascript 如何在状态间切换?,javascript,typescript,Javascript,Typescript,我寻找一种简短易读的方式来切换状态 例如,性别状态:m->f->n 现在我用两种方法 if (this.gender === "m") this.gender = "f"; else if (this.gender === "f") this.gender = "n"; else this.gender = "m"; 或 两者都很可怕。 我遗漏了什么吗?您可以使用映射表: const mapping = { 'm': 'f', 'f': 'n', 'n'
if (this.gender === "m") this.gender = "f";
else if (this.gender === "f") this.gender = "n";
else this.gender = "m";
或
两者都很可怕。
我遗漏了什么吗?您可以使用映射表:
const mapping = {
'm': 'f',
'f': 'n',
'n': 'm',
}
并按如下方式使用:
this.gender = mapping[this.gender];
//编辑
与此同时,@VRoxa已经提供了我的另一个解决方案。另一种较短但也很神秘的方法是通过有序数组进行迭代
const genders = [ 'm', 'f', 'n' ];
let index = 0;
const toggle = () =>
genders[(++index) % 3];
甚至可以为不同的迭代定义处理程序
const genders = [ 'm', 'f', 'n' ];
const toggleHandler = () => {
let index = 0;
return () => genders[(++index) % 3];
}
const toggle = toggleHandler();
// Decice whether you want to increment
// then return or vice-versa
console.log(toggle()); // f
console.log(toggle()); // n
console.log(toggle()); // m
console.log(toggle()); // f
希望能有所帮助。这是一个非常有趣的问题。实际上,我想到了一些方法: 使用字符串和偏移:
var genderpath = "mfn";
gender = genderpath[(genderpath.indexOf(gender)+1)%genderpath.length];
使用对象:
var genders = {'m': 'f', 'f': 'n', 'n': 'm'};
gender = genders[gender];
使用多种解决方案的组合可能是最好的:
var genderpath = "mfnm";
gender = genderpath[genderpath.indexOf(gender)+1];
天哪,真聪明!我也有这个解决方案,但它的可读性不如其他两个。然后使用枚举,因为您使用的是Typescript。最后一个很漂亮!尽管本杰明的答案可能更具可读性。
var genderpath = "mfnm";
gender = genderpath[genderpath.indexOf(gender)+1];