一、一维数组
1.一维数组
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; //var num = new Number(avg_weight); document.writeln("总体重是"+all_weight+"平均体重是:"+avg_weight.toFixed(2));
如果你想知道,数据类型
window.alert(avg_weight.constructor);
js中的数组,可以存放各种数据类型(数值、字符串)
数组的细节:
基本用法:
var 数组值 = [元素值1,元素值2...];
1.1数组中的值可以是任意类型的。
var num = ["helo",12,35.12];
1.2数组在内存中存在的形式:
js中的数组是引用传递
递归示例:
function abc(num1){ if(num1>3){ abc(--num1); } document.writeln(num1); } abc(5);
1.3 值传递与引用传递的区别
1.3.1 值传递
var myval =900; //在内存中新开一块区域
function abc(val){ //内存栈中新开一块区域,把myval的值复制一份副本传递给abc这个
方法的形参val
val = 90;
}
abc(myval);
1.3.2 引用传递
var myarr=[456,90,900]; fuction 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开始编号的。
1.4 js的数据可以动态增长
var a = [2,34]; alert(a.length); a[2] = 56; alert(a.length); a[3] = "hell"; alert(a.length);
1.5 js数组的几个重要的应用
数组名.length
拆分字符串 字符串.split(拆分标准)
对字符串分割,生成一个字符串数组:
var str = "hello world abc 顺平"; var arr = str.split(" ",3); for(var i=0;i<arr.length;i++) { document.writeln(arr[i]); }
遍历数组还可以这样写:
var arr =[45,90,0,"hello"]; arr['gg'] = 900; // arr[0] arr[1] arr[2] arr[3] arr['gg'] for(var key in arr) { alert(key + "=" + arr[key]); }
二、二维数组
var arr=[["shunping",10.23,12],["a","b","c"]]; for(var i=0;i<arr.length;i++) { for(var j=0;j<arr[i].length;j++) { document.writeln(arr[i][j] +" "); } document.writeln("<br/>"); }
三、排序查找
3.1 冒泡排序
var arr = [5,0,-56,900,12,35]; //var arr = [ 1,2,3,34,44,94] var flag = false; 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]); }
3.2 二分查找:
前台条件:该数组是有序的,不过不是有序的数组,不能使用二分查找。
代码:
var arr = [1,4,6,8,9,90,900];
//思路:找到数组的中间数(midVal),和你要查找的数(findVal)进行比较,如
果//midVal>findVal,则说明findVal在数组的左边,就把该数组二分(就在左边查找)
var arr = [1,4,6,8,9,90,900]; function binarySearch(arr,findVal,leftIndex,rightIndex){ //防止无穷递归 if(leftIndex>rightIndex) { document.writeln("找不到"); return; }
//找到中间值 var midIndex = Math.floor((leftIndex + rightIndex)/2); 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,2,0,arr.length-1);
四、矩阵转置
//矩阵转置:就是行列互换 /* 2 4 6 8 8 9 0 -1 9 6 2 1 */ 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]; } } //遍历数组 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/>"); }