近半年來一直覺得自己在技術上好像左右掙扎,技術沒啥提升,看書看不進,自學還挺慢。寫出來的東西,自己都覺得不滿意。讓自己也用庸人自擾的感覺。
最近,在工作中,有一個小小的功能需要實現,這個功能非常簡單,其大概功能是:當有一批商品需要促銷時,滿多少到多少元區間立減多少元,再比較離下一個優惠區間還差多少元,並提示下一區間的優惠價。比如,我這里有個價格優惠區間(滿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.看看有沒有更好的寫法,不要吝惜自己的才華,請在評價那里一展你的風采。