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

review一个javascript功能函数

时间: 2024-11-07 09:56:04

review一个javascript功能函数的相关文章

Functions类,一个Javascript的函数加法类,将两个函数加起来,顺序执行

以下是类的代码: 1 var Functions = { 2 oFunctions: null, 3 add: function (oFunc, oNewFunc) { 4 var oNew = function () { 5 oFunc(); 6 oNewFunc(); 7 }; 8 return oNew; 9 } 10 }; 以下是测试代码: 1 function one() { 2 alert(1); 3 } 4 5 function two() { 6 alert(2); 7 } 8

js 的数组怎么push一个对象. Js数组的操作push,pop,shift,unshift JavaScript使用push方法添加一个元素到数组末 JavaScript数组函数unshift、shift、pop、push使用

push()函数用于向当前数组的添加一个或多个元素,并返回新的数组长度.新的元素将会依次添加到数组的末尾. 该函数属于Array对象,所有主流浏览器均支持该函数. 语法 array.push( item1 [,items... ] )参数 参数 描述item1 任意类型添加到当前数组末尾处的元素.items 可选参数/任意类型要添加到当前数组末尾处的其他项,可以有多个.注意:如果添加的元素类型为数组类型(Array),仍然会被当作一个元素看待,只是这个元素是数组类型而已.如果要合并两个数组,请使

每天一个JavaScript实例-使用带有定时器的函数闭包

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-使用带有定时器的函数闭包</title> <style> #redbox{ position:absolute; left:100px;

04微信公众平台 - 实现【翻译】功能函数,返回一个文本字符串。

一.功能代码函数实现 private function _baiduDic($keyword) { $tranurlaip = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=9peNkh97N6B9GGj9zBke9tGQ&q={$keyword}&from=auto&to=auto"; //翻译URLapi地址 $transtr = file_get_contents($tranurl

05微信公众平台 - 实现【点歌】功能函数,返回一个文本字符串。

一.功能代码函数实现 /* * 功能5:根据歌名点歌功能,输入歌名即可,传入参数为输入对象$postObj */ private function _listenMusic($postObj) { $ret= "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTi

03微信公众平台 - 实现【天气查询】功能函数,返回一个文本字符串。

一.功能代码函数实现 private function _weather($city) { include("weather_cityId.php"); $c_name=$weather_cityId[$city]; if(!empty($c_name)){ $json=file_get_contents("http://m.weather.com.cn/data/".$c_name.".html"); $data = json_decode($

【C语言】请编写实现以下功能函数:实现对一个8bit数据(unsigned char)的指定位(例如第8位)的置0或置1操作,并保持其他位不变

/*请编写实现以下功能函数:实现对一个8bit数据(unsigned char)的指定位(例如第8位)的置0或置1操作,并保持其他位不变. 函数原型:void bit_set(unsigned char *p_date,unsigned char position,int flag). 函数参数说明:p_date是指定数据源,position是指定位(1~8),flag是置0或置1. */ #include <stdio.h> void bit_set(unsigned char *p_dat

写一个JavaScript函数,把url解析成对象

请编写一个JavaScript函数parseUrl.目的是把URL参数解析为一个对象,如: var url='http://192.168.1.1/index.php?p0=0&p1=1&p2=2'; var obj=parseUrl(url);console.log(obj.p0,obj.p1,obj.p2);//输出0,1,2 1 <script> 2 var url='http://192.168.1.1/index.php?p0=0&p1=1&p2=2'

怎么实现一个:判断指定进程有无响应的功能函数. (转)

/* 怎么实现一个:判断指定进程有无响应的功能函数. 已知条件为:一个进程ID,求这个进程有无响应;用VC平台实现. 我在网络查找一些资料,copy后得出以下一个程序,但不能检测出结果,运行时会出错. 接触C++不是很长时间,希望大家能帮帮我,解决这个问题,谢谢. 如果还有其它方法,请给予提示.谢谢.  */ /////////////////////////////////////////////////////////////////////////////// #include <wind