Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 在JS中格式化简单When函数的最佳方法_Javascript_Readability_Code Readability - Fatal编程技术网

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

Javascript 在JS中格式化简单When函数的最佳方法,javascript,readability,code-readability,Javascript,Readability,Code Readability,我在Ruby中找到了这段代码(来自): 考虑到JS缺少“when”函数,我在考虑如何在JS中最好地格式化它 作为参考,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; }

我在Ruby中找到了这段代码(来自):

考虑到JS缺少“when”函数,我在考虑如何在JS中最好地格式化它

作为参考,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;

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

对一个对象也一样

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];

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

constdx=dir=>{
映射={E:1,W:-1,N:0,S:0};
返回映射[dir];
}

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

我找到了这个问题的答案,就是添加方括号(在ES6中):


它可以用于:
DX[dir]

哇,IDK为什么我从来没有想过。谢谢你的回答:)我会投赞成票,但我不会接受,因为我想继续讨论,如果可能的话,给其他方法一些时间。另一种变体是省略
N
S
键,然后是
DX[dir]??0
。这可能也适合这个用例。
DX=dir=>{E:1,W:-1}[dir]??0
并使用as
value=DX(dir)
@jonaswillms,将值分隔为更多(混乱的)代码。实际上,这不起作用。它将文字字符串“E”赋值为1,而不是变量E(数值)4的值。所以DX[dir]返回NaN,因为4没有映射到任何东西。使用一个对象是个好主意,并且仍然使它成为一个类似于我上面的函数。然而,这个答案仍然与Nina的答案一样,字母被映射到字符串“E”、“W”等,而不是带有数值(1、2、4、8)的变量
DX=dir=>!!(dir&4)!!(dir&8)
。只是开玩笑而已。
//           N     S     E     W
const DX = { 1: 0, 2: 0, 4: 1, 8: -1 };

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