Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在状态间切换?_Javascript_Typescript - Fatal编程技术网

Javascript 如何在状态间切换?

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'

我寻找一种简短易读的方式来切换状态

例如,性别状态: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': '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];