当前位置: 代码迷 >> JavaScript >> Javascript干模糊查询 | 第二章 完美的调用筑造最后的成功
  详细解决方案

Javascript干模糊查询 | 第二章 完美的调用筑造最后的成功

热度:107   发布时间:2012-09-18 16:21:42.0
Javascript做模糊查询 | 第二章 完美的调用筑造最后的成功。


前言

上一章我们提到了高性能的循环,那么那个函数到底在哪里调用呢?它又代表什么呢?现在让我为大家解分析。当然这也是履行上次我的诚诺,因此必须认真点。好了,话不多说,把大脑运转起来,我要开始讲解了!!


讲解

首先看看上次解析代码,毕竟温故而知新:


var vData= ["name", "sex", "age", "job", "e-mail"];

function find(sFind, sObj)
{
	var nSize = sFind.length;
	var nLen = sObj.length;

	var sCompare;

	if(nSize <= nLen ){
		for(var i = 0; i <= nLen - nSize + 1; i++){
			sCompare = sObj.substring(i, i + nSize);
			if(sCompare == sFind){
				return i;
			}
		}
	}

	return -1;
}


上次我说过了,这里运用比较好的就是循环(具体分析请看上一章: 


Javascript做模糊查询 | 第一章 高性能循环带动整体效率。里面有具体的解释,看了上一章才能看懂这篇文章

),那么没有好的调用平台,即使循环再好也没有用武之地,就像孔明到了袁绍那样不听劝告的君主手里。所以我要把调用的函数好好讲讲,看下面的代码:



function findEach()
{
	var sFind = document.getElementById("input").value;
	if(sFind==""){
		alert("Can not be empty.");
	}

	if(sFind!=""){		
		var nPos;
		var vResult = [];
		
		//for(var i = 0; i <= vData.length; i++){
		for(var i in vData){
			var sTxt=vData[i]||'';
			nPos = find(sFind, sTxt);
			//nPos=sTxt.indexOf(sFind);
			if(nPos>=0){
				vResult[vResult.length] = sTxt;
			}
		}

		alert(vResult);
	}
}


这就是调用函数。看我一字一句的分析在下:

var sFind = document.getElementById("input").value;


这句谁都懂,就是取元素的值,也就是取要你找的那个字符的值。

在html中的对应代码为:


<input id="input" type="text" value="" />


然后看js代码中的代码:

if(sFind==""){
		alert("Can not be empty.");
	}

这段是在讲不允许要找的那个字符为空字符。当然这都很简单。再看代码:



if(sFind!=""){		
		var nPos;
		var vResult = [];
		
		//for(var i = 0; i <= vData.length; i++){
		for(var i in vData){
			var sTxt=vData[i]||'';
			nPos = find(sFind, sTxt);
			//nPos=sTxt.indexOf(sFind);
			if(nPos>=0){
				vResult[vResult.length] = sTxt;
			}
		}

		alert(vResult);
	}

这就在调用函数,当然要在调用前加个条件:要找的那个字符为空字符不能为空字符,然后进行循环。在循环里,我用了for(...in...)的语句,目的是为了遍历数组。然后看下面的代码:

var sTxt=vData[i]||'';


这是一句防御性编程语句,因为要保证取回的一定是个字符或字符串。(var = xxx || ' '代表如果前面不满足就做||后面的。)然后调用前面的find()函数,并给参数赋值,参数sFind赋值为这里定义的变量sFind(也就是要找的那个字符),参数sObj赋值为sTxt,也就是取数组vData(定义的全局变量,文章前面写的代码里有。)中下标为i的值 。然后把调用的函数赋值给变量nPos。然后判断nPos是否大于0,如果大于就以数组长度为下标取数组的值,并赋值给sTxt。


说明运行成功。那么假设没有找到,函数find()返回-1,就不满足条件,于是就不运行后面代码。

(提示:只有看了上章才能看懂这章,否则你有可能不能理解。)

下一章我就会公布全部代码和自己的编程体会,敬请期待。

  相关解决方案