我有一个相当重复的switch case语句,在寻求学习最简单的做事方式的过程中,我想转向SO,看看下面是否有更优雅的解决方案:
switch(id)
{
case 'ib-02a':
if(direction == 'left')
setHash('ib-02b');
break;
case 'ib-02b':
if(direction == 'right')
setHash('ib-02a');
if(direction == 'left')
setHash('ib-02c');
break;
case 'ib-02c':
if(direction == 'right')
setHash('ib-02b');
if(direction == 'left')
setHash('ib-02d');
break;
case 'ib-02d':
if(direction == 'right')
setHash('ib-02c');
break;
case 'ib-03a':
if(direction == 'left')
setHash('ib-03b');
break;
case 'ib-03b':
if(direction == 'right')
setHash('ib-03a');
if(direction == 'left')
setHash('ib-03c');
break;
case 'ib-03c':
if(direction == 'right')
setHash('ib-03b');
if(direction == 'left')
setHash('ib-03d');
break;
case 'ib-03d':
if(direction == 'right')
setHash('ib-03c');
break;
case 'pb-05a':
if(direction == 'left')
setHash('pb-05b');
break;
case 'pb-05b':
if(direction == 'right')
setHash('pb-05a');
if(direction == 'left')
setHash('pb-05c');
break;
case 'pb-05c':
if(direction == 'right')
setHash('pb-05b');
if(direction == 'left')
setHash('pb-05d');
break;
case 'pb-05d':
if(direction == 'right')
setHash('pb-05c');
break;
}
我正在读取滑动事件,并且如果要滑动的元素的ID与ib-02 *,ib-03 *或pb-05 *相匹配,我将为适当的ID调用setHash函数。如果我在* a上滑动,则向左滑动到* b。如果我在* b上滑动,则向右滑动至* a,向左滑动至* c。依此类推,始终在* a和* d之间。
一定有一种不太重复的方法来执行此操作,但是我不确定确切的最佳方法是什么。
最佳答案
如何将它们映射到对象?然后,只需将setHash
与检索到的值一起使用即可。
var ids = {
'pb-05c' : {
left : 'pb-05d',
right : 'pb-05b'
}
...
}
function setHashes(id,direction){
if(id && ids[id]){
id = ids[id];
if(direction && id[direction]){
setHash(id[direction]);
}
}
}
全部都是检索,没有条件评估,这可能对性能有好处。