近半年来一直觉得自己在技术上好像左右挣扎,技术没啥提升,看书看不进,自学还挺慢。写出来的东西,自己都觉得不满意。让自己也用庸人自扰的感觉。

最近,在工作中,有一个小小的功能需要实现,这个功能非常简单,其大概功能是:当有一批商品需要促销时,满多少到多少元区间立减多少元,再比较离下一个优惠区间还差多少元,并提示下一区间的优惠价。比如,我这里有个价格优惠区间(满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功能函数的更多相关文章

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

    以下是类的代码: var Functions = { oFunctions: null, add: function (oFunc, oNewFunc) { var oNew = function ( ...

  2. 关于 URL 编码及 JavaScript 编码函数【转载+整理】

    原文地址:http://www.ruanyifeng.com/blog/2010/02/url_encoding.html 本文内容 引入 环境 测试 JavaScript 编码函数   引入 URL ...

  3. JavaScript功能检测技术和函数构造

    Javascript与很多编程语言不同,它不能够控制其运行环境.再写php代码时,只要在服务器端部署了正确的版本,那么程序就绝对能够运行,对于其他python或ruby后端语言来说,也不存在什么灰色区 ...

  4. js javascript map函数去重功能的使用实例

    js javascript map函数去重功能的使用实例 先上一个实战例子代码 var map = new Map(); for(var i=0; i<=9; i++){ map.set(i,i ...

  5. 一个JavaScript触发器插件,可通过指定频次、指定时间内触发指定的处理函数

    js-trigger是一个JavaScript触发器插件,可通过指定频次.指定时间内触发指定的处理函数 Tango<tanwei_yx@126.com> 特性 支持AMD/CMD/Comm ...

  6. 推荐一个JavaScript触发器插件,可通过指定频次、指定时间内触发指定的处理函数

    推荐一个JavaScript触发器插件js-trigger js-trigger是一个JavaScript触发器插件,可通过指定频次.指定时间内触发指定的处理函数 https://tanwei-cc. ...

  7. JavaScript中函数作为另一个函数的参数的时候它存在于哪个作用域

    一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(fun ...

  8. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

  9. 创建你的第一个JavaScript库

    是否曾对Mootools的魔力感到惊奇?是否有想知道Dojo如何做到那样的?是否对jQuery感到好奇?在这个教程中,我们将了解它们背后的东西并且动手创建一个超级简单的你最喜欢的库. 我们其乎每天都在 ...

随机推荐

  1. Codeforces-417D总结&题解

    在分析题目前,一定要完全读懂题目意思,否则一些都是白搭.这道理谁都懂,但是能每次都做到的人不多.比如本人,这次又粗心地在这里疯狂地踩坑了. (1)本题有这么一句话:But Gena's friends ...

  2. Windows网络编程基础知识

    1.WinSock的初始化 #include<iostream> #include<WinSock2.h> #include<MSWSock.h> #pragma ...

  3. wkhtmltopdf Windows下 测试demo 成功

    html2pdf 转pdf 中文不换行 然后找到了wkhtmltopdf 支持中文换行 样式也支持 在PHP中生成PDF文件,可以使用 FPDF 和 TCPDF .但是它们只能用于创建简单的表格,当涉 ...

  4. ftplib模块编写简单的ftp服务

    from ftplib import * import os,readline import sys class MyFtp: ftp = FTP() #建立一个ftp对象的链接 '): #构造函数初 ...

  5. 异步编程之Generator(2)——剖析特性

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  6. 神奇的make自动生成include file的功能

    嗯,今天研究公司makefile的代码,始终搞不明白有一段下载编译依赖的rule recipe(对这个名词不了解请参考make的官方文档)是怎么执行的.明明在执行的时候并指定的target并没有依赖那 ...

  7. python的socket编程之udp编程

    在上篇文章中,仅仅讲述了如何进行了TCP编程,在本章中,将讲述使用udp进行编码,先看如下的代码,服务器端: root@python 513]# cat serverudp.py #!/usr/bin ...

  8. 使用C#书写SQLite数据库增删改查语句(以及插入byte[]时遇到的问题总结)

    在没有使用SQLite这种轻量级的数据库之前,只使用过Sqlserver2008进行数据的增删改查,公司使用的是大型的ORACLE数据库,还没有真正的会使用它.那时候觉得数据库很庞大,然而遇到SQLi ...

  9. leetcode572

    /** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...

  10. python实战===python控制键盘鼠标:pynput

    Python控制键盘鼠标:pynput 地址:https://pypi.python.org/pypi/pynput 这个库让你可以控制和监控输入设备. 对于每一种输入设备,它包含一个子包来控制和监控 ...