js代码调优

         昨天写了个javaScript方法,是按查询条件从硬件设备(税控盘)中读取发票信息,查询条件有发票代码(FPDM)、发票号码起(FPHM_Q)、发票号码止(FPHM_Z)、发票状态(FPZT)、开票日期起(RQQ)、开票日期止(RQZ)。硬件设备提供的查询条件有查询方式(CXFS)、发票代码(FPDM)、发票号码起(FPHM_Q)、发票号码止(FPHM_Z)、开票日期起(RQQ)、开票日期止(RQZ),查询规则如下:

CXFS0时:

12位发票代码+8位起始号码+8位终止号码

CXFS1是:

8位起始日期+8位终止日期(YYYYMMDD

        按照上面的查询条件,我们只能是按照两种方式(按照发票代码、发票号码查询;按照开票日期查询)查询,例如按照开票日期查询,可是这样查询满足不了需求呀,经过思考发现,我们可以对按照开票日期查询返回的json对象进行二次查询。这是出现了一个效率低的方法和一个效率高的方法:

        方法一:

        var v_jsonCx = {
                CXFS:'1', //按照日期段查询
                RQQ:getVal('RQQ'),          //getVal()为封装的获取值的方法
                RQZ:getVal("RQZ")
        };

        var v_rtnJson = skpOcx.readFpmx(v_jsonCx); //从设备中读取发票信息

        if(v_rtnJson != null){

                var v_fpdm = getVal('FPDM');  
                var v_fphm_q = getVal('FPHM_Q');  
                var v_fphm_z = getVal('FPHM_Z');
                var v_fpzt = getVal('FPZT_DM'); 

                var v_array = new Array();

                if(v_fpdm != ''){ //发票代码不为空

                    for(var i in v_rtnJson){

                        if(v_fpdm == v_rtnJson.FPDM){

                            v_array.push(v_rtnJson[i]);

                        }

                    }

                    v_rtnJson = v_array;

                    v_array.clear();

                }

                if(v_fphm_q != ''){ //发票日期起不为空

                    for(var i in v_rtnJson){

                        if(v_fpdm <= v_rtnJson.FPRQ){

                            v_array.push(v_rtnJson[i]);

                        }

                    }

                    v_rtnJson = v_array;

                    v_array.clear();

                }

 

                if(v_fphm_q != ''){ //发票日期起不为空

                    for(var i in v_rtnJson){

                        if(v_fpdm <= v_rtnJson.FPRQ){

                            v_array.push(v_rtnJson[i]);

                        }

                    }

                    v_rtnJson = v_array;

                    v_array.clear();

                }

                if(v_fphm_z != ''){ //发票日期止不为空

                    for(var i in v_rtnJson){

                        if(v_fphm_z >= v_rtnJson.FPRQ){

                            v_array.push(v_rtnJson[i]);

                        }

                    }

                    v_rtnJson = v_array;

                    v_array.clear();

                }

                ......需要写6for循环

        }

        方法二:(一个for循环搞定)

        var v_jsonCx = {
                CXFS:'1', //按照日期段查询
                RQQ:getVal('RQQ'),          //getVal()为封装的获取值的方法
                RQZ:getVal("RQZ")
        };

        var v_rtnJson = skpOcx.readFpmx(v_jsonCx); //从设备中读取发票信息

        if(v_rtnJson != null){

                var v_fpdm = getVal('FPDM');  
                var v_fphm_q = getVal('FPHM_Q');  
                var v_fphm_z = getVal('FPHM_Z');
                var v_fpzt = getVal('FPZT_DM'); 

                var v_array = new Array();

                for(var i in v_rtnJson){
                    var fpJson = v_rtnJson[i];
                    if((v_fpdm == ''? true :v_fpdm == fpJson.FPDM)
                            && (v_fphm_q == ''? true :parseFloat(v_fphm_q) <= parseFloat(fpJson.FPHM))
                            && (v_fphm_z == ''? true :parseFloat(v_fphm_z) >= parseFloat(fpJson.FPHM))
                            && (v_fpzt == ''? true :v_fpzt == fpJson.FPZT)){
                        v_array.push(rtnJson[i]);
                    }
                }
                rtnJson = v_array; 

        }

        以上的js代码调优,是不是和查询数据库里面的查询条件一样呢?希望各位大虾来评论!

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值