`
aijuans
  • 浏览: 1564965 次
社区版块
存档分类
最新评论

Javascript模糊查找 | 第一章 循环不能不重视。

    博客分类:
  • Way
Way 
阅读更多


最近受我的朋友委托用js+HTML做一个像手册一样的程序,里面要有可展开的大纲,模糊查找等功能。我这个人说实在的懒,本来是不愿意的,但想起了父亲以前教我要给朋友搞好关系,再加上这也可以巩固自己的js技术,于是就开始开发这个程序,没想到却出了点小问题,我做的查找只能绝对查找。具体的js代码如下:


function search(){
	var arr=new Array("my name","my father name","my brother name","my mother name","my friend name","Bula Bula");
	var searchfont=document.getElementById('search').value;

	isCon(arr, searchfont);

	if(searchfont!="my name" && searchfont!="my father name" && searchfont!="my brother name" && searchfont!="my mother name" && searchfont!="my friend name" && searchfont!="Bula Bula"){
		alert('Not found.');
	}
}

function isCon(arr, val){
	for(var i=0; i<arr.length; i++){
		if(arr[i] == val){
			if(i==0){
				alert('ture.');
			}else if(i==1){
				alert('ture.');
			}else if(i==2){
				alert('ture.');
			}else if(i==3){
				alert('ture.');
			}else if(i==4){
				alert('ture.');
			}else if(i==5){
				alert('ture.');
			}
		}
	}
}
/*这个是我做了修改的代码。如果你在html里加入这几行代码:
<input type="text" id="search" value="" />
<input type="button" onclick="search()" value="查找" />
就可以做绝对查找了。感兴趣的朋友可以试试看。*/
 


虽然我把查找功能做出来了,但这是绝对查找,可不行呀,不光是连答应下来的任务没有完成,还证明了自己技术不过关,于是我开始研究。终于工夫不负有心人,我耗尽了3天的研究时间,终于把这个环节给弄出来了。



接下来我便要开始讲解代码了。

首先来看:


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


 这个环节很重要,如果程序运行起来,输入查找时,就是在这里开始查找,改了里面的值也就等于改了搜索出的结果。(说到运行,我不得不感到庆幸,因为js运行是不用编译的,而C/C++就要。但有时不编译也会带来麻烦,比如运行不成功,不知道哪里有错,总之个有长处短处)。


再看代码:


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;
}


这串代码就是核心所在(这个函数是在另一段代码中调用),最令我感到满意的要属巧妙的运用了循环!!首先我取了两个参数的长度,为后面做循环做好铺垫。接下来就是循环出场的时候。

首先,看看这个循环到底怎么回事。我把取出来的参数的长度相减再加1,那么这个循环怎么理解呢?它有什么决定性的作用呢?我给大家举个列子,大家就明白了:


假设将一段文字wertyuik放入前面我提到的数组中的一个元素中,现在要在数组中查ty这几个字,那么前面两组文字的长度相减加1后为7,那要循环7次。如果数组一开始循环,下标是0,变量i也是0,sCompare的就取下标0和下标2(ty长度为2,i的值为0,相加为2)之间的值(xxx.substring用于去两个值之间的值),那么那么示意图可以画为:(^是下标指向的位置,i等于多少下标就取向那里; ^为 i + nSize的位置)


w e r t y u i k

^    ^


这样一来sObj.substring取值的就是we(不算r那位,但要算w那位),然后把取来的给sCompare这个变量,让if()...语句来判断她是否等于sFind(也就是ty这两个字符),不等于就继续循环,一直到等于sFind为止,就返回变量i。


那我给的字符wertyuik中循环4次后就能找出要找的ty两个字符,具体的4次是怎样的过程呢?我们来看下面的示意图:(^是下标指向的位置,i等于多少下标就取向那里;^为 i + nSize的位置)


第一次:

w e r t y u i k

^    ^

(^指向w, ^指向we)


第二次:

w e r t y u i k

   ^   ^

(^指向e, ^指向t,取e r)


第三次:

w e r t y u i k

      ^  ^

(^指向e, ^指向y,取rt)


第四次:

w e r t y u i k

        ^   ^

(^指向t, ^指向u,取ty)

找到,返回i。


这样一个过程就完成了。


接下来的代码我不解释了,下次再写。

后面的调用函数代码如下:


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);
	}
}




把上面的代码加上,补上html,就行了。html里加上的代码:


<input id="input" type="text" value="" />
<input id="search" type="button" onclick="findEach()" value="Search" />

 然后你还可以做些查询提示,比如能查哪些词呀,使用说明呀。。。(我最喜欢能一目了然看清规则的程序)

这样一来就能查找"name", "sex", "age", "job", "e-mail"里含了哪些字,并能列出有哪些。


(唉,写文章头都写昏了。。。)

上面没解释的代码,就等到下次来给大家解释吧。尽情期待吧!

分享到:
评论

相关推荐

    javaScript循环结构程序设计

    javaScript循环结构程序设计,JavaScript提供了for、while、do…while等循环结构满足不同的循环情况。

    JavaScript之for循环语句(源代码)

    JavaScript之for循环语句(源代码)JavaScript之for循环语句(源代码)JavaScript之for循环语句(源代码)JavaScript之for循环语句(源代码)JavaScript之for循环语句(源代码)JavaScript之for循环语句(源代码)JavaScript之...

    JavaScript中的循环总结(教辅)

    JavaScript中的循环总结(教辅)JavaScript中的循环总结(教辅)JavaScript中的循环总结(教辅)JavaScript中的循环总结(教辅)JavaScript中的循环总结(教辅)JavaScript中的循环总结(教辅)JavaScript中的循环...

    javascript教案 JavaScript基础

    第一章 概述 4 1.1 JavaScript的由来 4 1.2 什么是JavaScript 4 1.3 JavaScript的特点 4 1.3.1 javascript的优点 5 1.3.2 javascript的局限性 5 1.4 Java 与 JavaScript 有什么不同 5 第二章 语法...

    JavaScript & jQuery 交互式Web前端开发

    更高效的学习JavaScript和jQuery,快速成为一名Web前端...第4章 判断和循环 第5章 文档对象模型 第6章 事件 第7章 jQuery 第8章 Ajax与JSON 第9章 API 第10章 错误处理与调试 第11章 内容面板 第12章 筛选、搜索与排序

    JavaScript字符串查找1

    如果发现不匹配,跳出内循环,将被查找文本的指针向后移动一位,然后重新开始内循环。 3. 如果内循环完整遍历了查找字符串,且所有字符都匹配,那么表示找到了一个匹配的子串,返回当前被查找文本指针的索引。 4. ...

    JavaScript课件

    第四章 "js控制流(上)"和第五章 "js控制流(下)"一起讲述了JavaScript中的流程控制结构,如条件语句(if...else)、循环(for、while)、switch语句以及如何使用break和continue控制循环流程。 第六章 "js数组...

    javascript初学教程 多本 pdf

    2. **第2章 JavaScript语言基础**:此部分会深入到JavaScript的基础语法,包括变量声明、数据类型(如字符串、数字、布尔值、null和undefined)、操作符、流程控制(如条件语句、循环结构)以及函数的基本用法。...

    JavaScript第四章的答案

    JavaScript是Web开发中不可或缺的一部分,尤其在前端领域占据着核心地位。第四章的学习通常涉及到JavaScript的基础语法、数据类型、变量、操作符、控制流程以及函数等关键概念。本章的答案集合将深入解析这些主题,...

    如何提升JavaScript的运行速度(循环篇).doc

    循环是JavaScript代码中常见的结构,但是不恰当的循环设计可能会严重拖慢程序运行速度,甚至导致浏览器出现“脚本失控”的警告。以下是对如何优化JavaScript循环的一些关键点的详细说明: 1. **避免在循环体中执行...

    javascript 模糊输入及多选 ,模糊查询,select等

    模糊输入是一种允许用户通过输入部分关键字就能匹配到相关选项的搜索机制。在JavaScript中,我们可以通过监听用户的键盘事件(如`onkeydown`)来实时更新显示的选项。例如,当用户在输入框中键入字符时,我们可以...

    JavaScript核心技术 PDF扫描版

    第1章JavaScript初探 1.1规范和实现相互交织的历史 1.2跨浏览器的不兼容性和其他常见的JavaScript传说 1.3你能用JavaScript来做什么 1.4JavaScript初探:“HelloWorld!” 1.5JavaScript沙箱 1.6可访问性和...

    javascript入门教程(共有8章pdf格式)

    1. **第一章:JavaScript简介** - JavaScript的历史和背景 - JavaScript与Java的区别 - JavaScript在浏览器中的执行环境:DOM(Document Object Model)和BOM(Browser Object Model) - JavaScript的基本语法:...

    无循环 JavaScript(map、reduce、filter和find)

    `find`方法用于找出数组中满足条件的第一个元素并返回该元素,如果找不到则返回`undefined`。这在我们需要查找特定元素时非常有用: ```javascript const foundElement = array.find(item =&gt; item === 'some...

    完全手册:JavaScript动态网页开发详解(1-8章pdf格式)

    这一章将介绍如何使用JavaScript来查找、修改和添加DOM元素,从而实现动态网页效果。 第六章:事件处理 事件是用户与网页交互的触发点,如点击按钮或滚动页面。本章将讲解如何绑定和处理事件,以及使用事件委托等...

    JavaScript DOM编程艺术 第2版.pdf 第二部分

    由于上传文件大小的限制,故分成两个压缩卷,请查找对应的第一部分 学习Javascript用《JavaScript DOM编程艺术》来入门最好不过了,老老实实看两遍,看完了你就会对JS有一个大概的了解,整本书都围绕着一个网页效果...

    javascript完全学习手册1 源码

    第1章 JavaScript简介 1 1.1 JavaScript概述 1 1.1.1 什么是JavaScript 1 1.1.2 JavaScript的基本特点 2 1.1.3 常用的Web开发语言 3 1.2 JavaScript的应用 4 1.2.1 客户端应用 5 1.2.2 服务器端应用 5 1.3 在Web页面...

    javascript权威指南,英文第四版

    《JavaScript权威指南》是JavaScript编程领域的一本经典之作,英文第四版更是对该语言的全面而深入的解析。这本书由David Flanagan撰写,以其详尽、严谨的风格深受开发者喜爱。在阅读这本书之前,我们先来了解一下...

    javascript试题(附答案)

    JavaScript中的函数是第一类对象,可以作为参数传递,也可以作为其他函数的返回值。使用`function`关键字声明函数,如`function greet(name) { console.log('Hello, ' + name); }`。 五、数组 JavaScript的数组可以...

Global site tag (gtag.js) - Google Analytics