review一個javascript功能函數


    近半年來一直覺得自己在技術上好像左右掙扎,技術沒啥提升,看書看不進,自學還挺慢。寫出來的東西,自己都覺得不滿意。讓自己也用庸人自擾的感覺。

    最近,在工作中,有一個小小的功能需要實現,這個功能非常簡單,其大概功能是:當有一批商品需要促銷時,滿多少到多少元區間立減多少元,再比較離下一個優惠區間還差多少元,並提示下一區間的優惠價。比如,我這里有個價格優惠區間(滿50減5,滿100減10,滿150減15,滿200減20),如果我現在買了120元商品,那么我的提示就應該是:已優惠10,還差30元,可優惠15元。

    這個功能是滿簡單的,因為優惠的價格區間是變化的,沒辦法在程序中寫死。所以后端的同學就會把這個優惠的價格區間用一種字符格式輸出來,我們再進行處理。字符格式如下:

<input type="hidden" name="priceRange" value="50:5,100:10,150:15,200:20" />

    我是直接把input的value處理成了一個對象{'50':5, '100':10, '150':15, '200':20}方便我我以后的處理。

    為了能獲取價格區間,我創建一個數組用來存放對象的key值,也就是所說的價格區間。

var priceRange = {'50':5, '100':10, '150':15, '200':20};
function getPrice(num,priceRange) {
    var oPrice = priceRange || {},
        aPrice = [],
        _pro;
    
    for (_pro in oPrice) {
        aPrice.push(_pro);
    }
    // ...
}

    接下來就是通過循環這個價格區間找出優惠的價格,並返回一個結果對象。

var priceRange = {'50':5, '100':10, '150':15, '200':20};
function getPrice(num,priceRange) {
    // ...
    for (var i = 0, len = aPrice.length; i < len; i++) {
        if (aPrice[0] > num) {
            break;
        }
        
        if (i === (len - 1)) {
            if (aPrice[i] <= num) {
                return {
                    hasPrice: oPrice[aPrice[i]]
                }
            }
        } else {
            if (aPrice[i] <= num && num < aPrice[i + 1]) {
                return {
                    hasPrice: oPrice[aPrice[i]],
                    price: aPrice[i + 1] - num,
                    youhui: oPrice[aPrice[i + 1]]
                }
            }
        }
    }
    // ...
}

    上面就是這個功能實現的比較關鍵的部分,下面看下完整的代碼:

var priceRange = {'50':5, '100':10, '150':15, '200':20};
function getPrice(num, priceRange) {
    var oPrice = priceRange || {},
        aPrice = [],
        _pro;
    
    for (_pro in oPrice) {
        aPrice.push(_pro);
    }

    for (var i = 0, len = aPrice.length; i < len; i++) {
        if (aPrice[0] > num) {
            break;
        }
        
        if (i === (len - 1)) {
            if (aPrice[i] <= num) {
                return {
                    hasPrice: oPrice[aPrice[i]]
                }
            }
        } else {
            if (aPrice[i] <= num && num < aPrice[i + 1]) {
                return {
                    hasPrice: oPrice[aPrice[i]], // 此價格的優惠價
                    price: aPrice[i + 1] - num, // 此價格離下一個價格的差
                    youhui: oPrice[aPrice[i + 1]] // 離下一個價格的優惠價
                }
            }
        }
    }
    return {
        hasPrice: 0,
        price: aPrice[0] ? aPrice[0] - num : 0,
        youhui: aPrice[1] ? oPrice[aPrice[1]] : 0
    }
}

console.log(getPrice(12, priceRange));

    雖然,這個功能的代碼寫出來了,但是我總覺得那個地方寫不好,但是自己卻發現不了。所以,寫出來,大家幫我code review.看看有沒有更好的寫法,不要吝惜自己的才華,請在評價那里一展你的風采。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM