u 数组(引用类型/复杂类型/复合类型),
① 数组的基本概念,用于存放一组数据。
② 特别强调:js中的数组,可以存放各种数据类型(数值、字串)
例如:
<script language="javascript" type="text/javascript">
/*
王大爷有6只乌龟,他们的体重分别是3kg,5kg,1kg,
3.4kg,2kg,50kg. 请问这六只违规的总体重是多少?
平均体重是多少?请你用现在账务的技术编一个程序解决
*/
//使用传统的方法,来解决问题,很麻烦。
/*var weight1=3;
var weight2=5;
var weight3=1;
var weight4=3.4;
var weight5=2;
var weight6=50;
var all_weight=weight1+weight2+weight3+weight4+weight5+weight6;
*/
var weights=[3,5,1,3.4,2,50];
var all_weight=0;
var avg_weight=0;
//数组的便利
for(var i=0;i<weights.length;i++){
all_weight+=weights[i]
}
avg_weight=all_weight/weights.length;
//如果想知道,数据类型
window.alert(avg_weight.constructor);
document.writeln("总体重是:"+all_weight+"平均体重"+avg_weight.toFixed(2));//num.toFixed(2),截取到小数点后2位数
</script>
③ 数组的细节、
⑴ 基本用法:
var 数组名=[元素值,元素值,….];
元素的值可以是任意类型
Var an=[4,56,”hello,word”,true]
数组在内存中的存在形式
⑵ js中的数组是引用传递
举例说明:
var myarr=[456,90,900];
function abc2(arr){
arr[0]=35;
}
abc2(myarr);
for(var i=0;i<myarr.length;i++){
document.writeln(myarr[i]);
}
原理图
⑶ 数组的引用
基本用法:
数组的名称[下标];
比如:
var a=[23,”hello”,4.5]
我们访问a[2] 则输出4.5
如果我们访问a[3] 则输出undefine
结论:不能访问不存在的元素
数组的下表从0开始编号的
比如var a=[23,”hello”,4.5]
a[0]=23;
a[1]=”hello”;
a[3]=4.5;
⑷ js的数组可以动态增长
var a=[2,3];
window.alert("size="+a.length);
//动态的增长
a[2]=56
window.alert("size="+a.length);
alert(a[2]);
⑸ 对字符串分割,生成一个字符串数组
var str="hello world abc 顺平"
var arr=str.split(" ");
//var arr=str.split("");
//var arr=str.split(" ",2);
for(var i=0;i<arr.length;i++){
document.write(arr[i]+" ");
}
⑹ 遍历数组
var arr=[45,90,0];
arr['gg']=9000;//下标的位置可以用字符串
for(var key in arr){
window.alert(key+"="+arr[key]);
}
第28讲 js二维数组 js冒泡排序 二分查找
一维数组小节
① 数组可以存放任意类型的数据
② 数组大小不必事先制定,可以动态增长
③ 数组名可以理解为指向数组首地址的引用
④ 数组元素从0开始编号的。
◆多维数组-二维数组
举例:
var arr=[[“shunping”,123,4,5],[“a”,”b”,”c”]]
看看如何遍历二位数组,以及转置
var arr=[[2,4,6,8],[8,9,0,-1],[9,6,2,1]]
//定义一个新的数组
var arr2=[];
//初始化,定下有多行
for(var i=0;i<arr[0].length;i++){
arr2[i]=[];
}
//可以动态的添加数据
//遍历旧的数组
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr[i].length;j++){
arr2[j][i]=arr[i][j];
}
}
//成功!遍历arr2数组就是一个转置数组
for(var i=0;i<arr2.length;i++){
for(var j=0;j<arr2[i].length;j++){
document.writeln(arr2[i][j]+" ");
}
document.writeln("<br/>");
}
◆数组的排序;
冒泡:
var arr=[5,0,-56,900,12,9000,-123,-1000];
var flag=false;
//大的排序次数(arr.length-1)
for(var i=0;i<arr.length-1;i++){
document.writeln("大循环。。。<br/>");
//小的排序
for(var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
//交换
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
flag=true;
}
}
if(flag){
flag=false;
}else{
break;
}
}
for(var i=0;i<arr.length;i++){
document.writeln(arr[i]+" ");
}
查找
这里我们讲解二分查找:
● 二分查找
var arr=[1,4,6,8,9,90,800];
//思路:找到数组的中间数(midVal),和你要查找的数进行比较,如果大于
//midVal>findVal则书名findVal在数组的左边,就把该数组二分(就只在左边查找)
function binarySearch(arr,findVal,leftIndex,rightIndex){
//进行查找有一个前提,防止无穷递归
if(leftIndex>rightIndex){
//提示找不到
document.writeln("找不到");
return;
}
//找到中间这个值
var midIndex=Math.floor((leftIndex+rightIndex)/2); //※javascript的/不是整除,有余数
//∴需要Math.floor向下取整。
var midVal=arr[midIndex];
//比较
if(midVal>findVal){
//在左边找
binarySearch(arr,findVal,leftIndex,midIndex-1);
}else if(midVal<findVal){
//在右边找
binarySearch(arr,findVal,midIndex+1,rightIndex)
}else{
document.writeln("找到 下标为"+midIndex);
return;
}
}
//测试
binarySearch(arr,90,0,arr.length-1)
转载于:https://blog.51cto.com/dwt1220/729832