vetty

翻页过程中不再重新匹配的方法

改进之前的代码如下:

 1 function HandleInput(answer,pageindex)
 2 {
 3         var plateArray = new Array();
 4         var convertReverseArray = new Array();
 5         var strRegEx = convertInput(answer);
 6         var regEx = new RegExp(strRegEx);
 7         regEx.compile(regEx);
 8 
 9         searchPlateBegin = new Date();
10 
11         for (var i = 0;i < keyArrayConvert.length;i++)
12         {
13             if (regEx.test(keyArrayConvert[i]))
14             {
15                 convertReverseArray.push(keyArray[i]);
16                 plateArray.push(keyArrayConvert[i]);
17             }
18         }
19 
20         matchPlateLength  = plateArray.length;
21 }

在这里每进行一次翻页,传进来一个车牌号answer 都会重新进入一次for循环,假如keyArrayConvert很大,就会耗时相当长,由于项目中翻页的功能每次传进来的车牌号都是一样的,这里指的是在模糊查询车牌的时候例如苏A*,所以说没必要翻页时每次都进行一次正则表达式匹配。采用的改进方法如下:

 1 if(fuzzy_flag == 0)
 2                 {
 3                // var plateArray = new Array();
 4                // var convertReverseArray = new Array();
 5                 var strRegEx = convertInput(answer);
 6                 var regEx = new RegExp(strRegEx);
 7                 regEx.compile(regEx);
 8 
 9                 searchPlateBegin = new Date();
10 
11                 for (var i = 0;i < keyArrayConvert.length;i++)
12                 {
13                     if (regEx.test(keyArrayConvert[i]))
14                     {
15                         convertReverseArray.push(keyArray[i]);
16                         plateArray.push(keyArrayConvert[i]);
17                     }
18                 }
19 
20                 matchPlateLength  = plateArray.length;
21                 }

此段代码的位置在HandleInput函数中,fuzzy_flag的位置在路由的入口处,代码如下:

 1     if(req.param("ajax") == null){
 2     if(fuzzy_search == req.param("plate"))
 3     {
 4         fuzzy_flag=1;
 5     }
 6     else
 7     {
 8         plateArray = [];
 9         convertReverseArray = [];
10     }
11     fuzzy_search = req.param("plate");
12     console.log("The fuzzy_flag is:",fuzzy_flag);
13     console.log("The fuzzy_search is:",fuzzy_search);
14    // }
15     }

这里通过fuzzy_search进行一次转接,fuzzy_search,plateArray,convertReverseArray的定义位置如下,在整段代码的入口处:

 1 var express = require('express');
 2 var iconv = require('iconv-lite');
 3 var fs = require('fs');
 4 var encodingConvert     = require('encoding');
 5 var buf                 = require('buffer');
 6 
 7 var router = express.Router();
 8 var plateArray = new String();
 9 var convertReverseArray = new String();
10 var originalUrl = new String();
11 var fuzzy_search = new String();

因为目的是翻页过程中不再进行匹配,那么plateArray,convertReverseArray的一次匹配的结果要一直用下去,就要把其定义为全局变量,重新取空的时间是输入另一个车牌号时即上端代码中的else语句,改进前由于是每次都进行一次匹配,所以要定义成局部变量。

fuzzy_search作为一次转接用来判定下次输入的车牌和本次的是否相同,若相同把fuzzy_search赋值1,若不相同,fuzzy_search为原值0不变,如果为0说明是新的车牌要重新进行匹配,如果为1即进行翻页无需进行匹配。

posted on 2015-02-09 11:02  cocos2014  阅读(239)  评论(0编辑  收藏  举报

导航