js的排序 js的查找
来源:互联网 发布:ubuntu 如何提权 编辑:程序博客网 时间:2024/06/15 10:39
js的排序
我们这里只介绍一下冒泡排序法:
算法
代码:
<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><script type="text/javascript">var arr=[0,-1,90,-18,900,90,78];var temp=0;for(var i=0;i<arr.length-1;i++){ //定小循环 for(var j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ //交换 temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } }//输出数组 document.write(arr);</script></html>js的查找
1. 顺序查找
一个一个的比较,如果是则查找到.
var arr=[3,5,90,12,-23];var findVal=90;var flag=false;for(var i=0;i<arr.length;i++){ if(arr[i]= = findVal){document.write(”找到了这个数 下标是”+i);flag=true;}}if(!flag){document.write(”一个都没有找到”);}
2. 二分查找
面试题: 一定掌握!
//二分查找[递归]
//二分查找要保证我们的数组是一个有序的.
//思想是
//首先把数组的中间这个数找出,然后和你要查询的数比较
//① 你要查询的数比中间的数大. 则说明我们应当该数组的右边[后边]查询
//② 你要查询的数比中间的数小 .则说明我们应当该数组的左边[前边]查询
//③ 你要查询的数等于中间的数, 说明找到
var arr=[1,90,100,123,4000];function binarySearch(findVal,arr,leftIndex,rightIndex){//退出条件if(rightIndex<leftIndex){document.write("查询没有结果");return;}//代码://找到中间数的下标var midIndex=Math.round((leftIndex+rightIndex)/2);if(arr[midIndex]<findVal){binarySearch(findVal,arr,midIndex+1,rightIndex);}else if(arr[midIndex]>findVal){ binarySearch(findVal,arr,leftIndex,midIndex-1);}else{document.write("找到 下标是"+midIndex);//binarySearch(findVal,arr,leftIndex,midIndex-1);}}//调用的格式binarySearch(100,arr,0,arr.length-1);
基于对象编程和面向对象编程叫法区分
js 中我们可以认为这个叫法一致.
js的面对对象编程的介绍
js是一种支持面向对象编程的脚本语句, 它有继承,封装,多态的特点.
课程中 基于对象==面向对象 类==原型对象
面向对象编程的引入
一个问题?
张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。
还有一只叫小花,今年10岁,花色。请编写一个程序,
当用户输入小猫的名字时,就显示该猫的名字,年龄,
颜色。如果用户输入的小猫名错误,则显示 张老太没
有这只猫猫。
我们的一个解决方法是 :(js面向对象编程的快速入门)
<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><script type="text/javascript">//定义了一个猫类function Cat(){ }//创建一只猫 [js对象的属性可以动态增加]var cat1=new Cat(); //cat1就是一个对象实例cat1.name="小白"; //cat1.age=3;cat1.color="白色"document.write(cat1.name+"--"+cat1.age+"--"+cat1.color);//特别说明// var cat1=new Cat(); //当做类(原型对象使用)// Cat(); //当做函数</script></html>
对象公开属性的访问方式有
对象名.属性名;
对象名[’属性名’];
js中自定义类(原型对象)的五种方法
1. 工厂方法
2. 通过构造函数来定义类(最多)
3. 通过prototype 来定义
4. 构造函数 和 prototype混合
5. 动态创建对象模式
js中一起都是对象
var i=0;window.alert(i.constructor);function Person(){}var p1=new Person();window.alert(p1.constructor);window.alert(Person.constructor);window.alert(Function.constructor);
可用通过 instanceof 来 判断某个对象实例是不是某个类的对象实例,
案例:
//如何判断一个对象实例是不是某个 类(原型对象)
if(p1 instanceof Dog){window.alert("p1是Person一个对象实例");}else{window.alert("p1是Dog一个对象实例");}u js的对象在内存中是怎样存在?var a=new Person();a.age=10;a.name=“小明”;var b=a;
js的对象回收机制!!!
u js的对象回收机制!!!
在js中维护一张对象对用表:
GC 如何去判断某个对象是垃圾对象.
当对象的地址被引用的次数,变成0, 则gc 就会认为该对象是垃圾,就会回收.
js中还提供了一种主动销毁对象属性的方法
基本语法是
delete 对象名.属性名; // 不要这样 delete 对象;
原理可以主动的销毁某个对象的属性
u this
① 提出问题?
我们在编程中,可能需要当我们创建一个对象后,这个对象就自动的有某些属性,怎么?
可以这样做:
function Person(){
//下面这句话表示,每创建一个Person实例,实例就会自动有一个属性
//name,并且是公开
this.name="小童";
}
如果你希望name是创建对象实例的时候指定,可以通过参数传入:
function Person(name){
//下面这句话表示,每创建一个Person实例,实例就会自动有一个属性
//name,并且是公开
this.name=name;
}
使用的时候:
$p4=new Person(“nini”);
$p4.name;
② 深入认识this的含义
//下面的代码讲解私有属性的怎样访问
function Person(){
var name="abc"; //私有的,只能在内部使用
var age=900; //私有的,只能在内部使用
//感受(相当于你是通过内部函数来访问私有的变量.)
//如何理解: 说有一个属性 show 因为前面有this
//说明 show属性是公开. 该属性是指向一个函数地址属性.
//则通过 show去调用该函数.
this.show=function(){
window.alert(name+" "+age);
}
}
var p1=new Person();
//window.alert(p1.name+" "+p1.age);//错误
p1.show();
对this的再认识:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script type="text/javascript">
//****案例如下****
function test1(){
alert(this.v);
}
var v=190;
test1(); //输出什么 <==> window.test1();
window.test1();
</script>
</html>
u this 只能在类定义的内部使用:
//说明this 只能在 类定义的内部使用
function Dog(){
this.name="小明";
}
var dog1=new Dog();
window.alert(this.name); //报空, 因为这样使用,相当于去访问window对象的name属性,但是你没有写.
☞ 补充讲解一个 var 的知识点:(还有说..)
//表示全局变量
var t=90;
function test(){
t=890;
}
test();
window.alert(t);
说明: var 变量: 表示该变量是全局的, 如果你其他函数中,使用变量是,前面没有带 var , 则表示要使用全局变量. 如果你在函数中 使用变量时候,带了 var 则说明你要使用全新的变量.
u js面向对象的成员函数
如果我们希望某个对象创建后,自动有方法使用,可以在定义类的时候,直接指定成员函数.(细节...)
第一种方法: 动态的给某个对象指定函数
*/
function Person(name,age){
this.name=name;
this.age=age;
}
//第一种方法,动态添加
function speak(){
document.write("我是"+this.name);
}
//创建一个对象实例
var p1=new Person("大黄",90);
p1.fun1=speak; //相当于动态的给p1对象分配一个fun1属性(函数);
你可以理解, fun1 是 speak函数别名
window.alert(p1.fun1);
p1.fun1();
speak(); //window
第一种方法还有一种体现形式
//创建一个对象实例
var p1=new Person("大黄",90);
p1.fun1=function speak(){
document.write("我是"+this.name);
}; //相当于动态的给p1对象分配一个fun1属性(函数);
第二种方法: 让所有的Person对象实例都有某个成员函数
//给所有对象分配函数
function Person(name,age){
this.name=name;
this.age=age;
this.speak=function (){
document.write(this.name+"hello");
}
}
var p1=new Person("小孩",9);
p1.speak();
var p2=new Person("大明",30);
p2.speak();
☞ 关于给对象指定成员函数说明:
如果添加的内部函数,该函数也称为特权函数, 所谓特权指的是可以访问对象的私有属性.
如果添加的是外部函数(给某个对象指定的函数),则这样指定函数,只能访问对象的公开属性,不能访问私有属性.
function Person(name,age,salary){
this.name=name;//公开
this.age=age;//公开
var salary=salary;//私有
}
var p1=new Person("宋江",34,1000);
function showInfo(){
document.write(this.name+this.age+salary);//这里salary是私有
}
p1.showInfo=showInfo;
p1.showInfo();
u 一个类中可以有公开的函数
this.属性=funciton (){};
u 一个类中也可以有私有的函数
代码:
function Person(){
this.name="abc";
var salary=900;
this.fun1=function (){
//代码
sayHello();
}
this.fun2=function(){
sayHello();
}
this.fun3=function(){
sayHello();
}
function sayHello(){
document.write("hello,资源打开"+this.name+" "+salary);
}
}
var p1=new Person();
p1.fun2();
小结: 通过代码我们可以看出.私有函数可以被 该类的其它方法(公开)调用,同时私有函数可以去访问 该对象的 公开或者私有的属性.
u 第三种方式给所有的对象实例添加方法(原型法)[推荐..]
function Dog(){
/* this.shout=function (){
document.write("小狗汪汪叫");
}*/
}
//原型法
Dog.prototype.shout=function (){
document.write("小狗叫");
}
var dog1=new Dog();
dog1.shout();
对我们原型法的一个实际运用:
/*
请思考给 js 的 Array 对象扩展一个find(val) 方法
,当一个Array对象调用该方法的时候,如果能找
到val则返回其下标,否则返回-1
*/
Array.prototype.find=function(val){
//顺序查找
for(var i=0;i<this.length;i++){
if(val==this[i]){
flag=true;
return i;
}
}
return -1;
}
var arr=[4,590,-1,890];
window.alert(arr.find(890));
u 自定类的工厂方法(了解即可)
当你编写 js 代码时,当你需要一个对象时,可以通过new Object 来创建一个对象,然后再动态的给该对象添加属性和方法.
//工厂法创建对象
var obj=new Object();
obj.name="大明";
obj.show=function (val){
window.alert("ok"+val);
}
obj.show("hello");
课堂小练习
Number类
var i=90;
var res=i.add(78).add(90).add(900).add(9000)
window.alert(res);
- js的排序 js的查找
- js的查找
- js排序和查找
- js array的排序
- js排序的方法。
- js数组的排序
- js数组的排序
- js 的冒泡排序
- js排序的算法
- js的sort排序
- js的排序
- js数组的排序
- js查找元素的方法
- js查找DOM的方式
- js 二分查找的实现
- js对表格的排序
- js表格的排序操作
- js 二维数组的排序
- C++中模块(Dll)对外暴露接口的几种方式
- linux网络十分有用的两个命令ip和tcpdump
- MFC 文件选择对话框
- C++中实现回调机制的几种方式
- 百度应用 android客户端(一)自定义导航栏
- js的排序 js的查找
- 在myeclipse中设置html的自动提示
- 如何将土豆优酷视频插入到自己网站里
- 是i++在两个线程里边分别执行100次,能得到的最大值和最小值分别是多少?
- Android自定义控件以及控件属性的自定义
- vc中怎么使用SendMessage自定义消息函数
- 启发自己心智的方法
- 渲染到纹理
- Ext.form.field.File示例