我有一个相当重复的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]);
        }
    }
}

全部都是检索,没有条件评估,这可能对性能有好处。

09-25 19:13