我在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];
}