翻页过程中不再重新匹配的方法
改进之前的代码如下:
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即进行翻页无需进行匹配。