JS中格式化简单When函数的最佳方法



我在Ruby中找到了这段代码(从这里开始(:

DX = { E => 1, W => -1, N =>  0, S => 0 }

我在考虑如何在JS中最好地格式化它,因为它缺少"when"函数。

作为参考,N、S、E和W是"方向",并有类似的别名:const N = 1, S = 2, E = 4, W = 8;

我本来想做一个快速箭头功能,但后来用了这个:

function DX(dir) {
if(dir==E) return 1;
if(dir==W) return -1;
if(dir==N) return 0;
if(dir==S) return 0;
}

这对我来说有点长,所以我试着缩短它:

function DX(dir) {
if(dir==E) return 1;
if(dir==W) return -1;
return 0;
}

再说一遍:

function DX(dir) {
return dir==E ? 1 : dir==W ? -1 : 0;
}

但现在我们遇到的问题是,这段代码可读性不强。所以我决定把它记录下来:

// returns the distance in x traveled by that direction
// E => 1, W => -1, N =>  0, S => 0
function DX(dir) {
return dir==E ? 1 : dir==W ? -1 : 0;
}

最后,我将其转换为可变语法和箭头函数:

let DX = (dir) => dir==E ? 1 : dir==W ? -1 : 0;

很明显,所有这些代码都是有效的,但我的问题是作为一种风格,哪种风格被认为是"最好的",无论是在行业中,在你看来,还是在你具体工作的地方?我认为可读性高于一切,那么在您看来,哪种代码最可读?就我个人而言,我更喜欢有文档的部分。

通过使用上面几个用户建议的对象,我们可以使代码更加简单。然而,我们遇到了对象使用文字字符串"N"、"S"、"E"one_answers"W"而不是变量的数值1、2、4和8的问题。

我在SO上找到了这个问题的答案,它只是添加了方括号(在ES6中(:

const N = 1, S = 2, E = 4, W = 8;
const DX = { [E]: 1, [W]: -1, [N]: 0, [S]: 0 };

它可以与:DX[dir]一起使用

只需对对象执行相同的操作。

const DX = { E: 1, W: -1, N: 0, S: 0 };
// use
value = DX[dir];

要将数值用作方向,需要将关键点映射到方向。

//           N     S     E     W
const DX = { 1: 0, 2: 0, 4: 1, 8: -1 };
// use
value = DX[dir];

我建议您创建一个将方向映射到别名的对象,并使用它从函数返回正确的别名。

const DX = dir => {
mapping = { E: 1, W: -1, N: 0, S: 0 };
return mapping[dir];
}

相关内容

最新更新