首页 > 代码库 > review一个javascript功能函数

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.看看有没有更好的写法,不要吝惜自己的才华,请在评价那里一展你的风采。