1.数组的概念
所谓数组,是有序的元素序列。(一组有序 数据)
js的数组可以包含任意数据类型,数组中的元素同场是同一种类型。
2.数组的构建方式
2.1字面量
var arr = [1,2,3,4,5];
2.2构造函数
var arr1 = new Array( ); //创建一个空数组
var arr1 = new Array();//创建了一个空数组
console.log(arr[0]);//0表示的索引(下标)取到的是数组的第一个值(元素)
console.log(arr[arr.length-1],arr.length);
console.log(arr[6]);
console.log(arr1.length);
var arr2 = new Array(5);//传一个参数时,参数表示数组的长度
console.log(arr2.length,arr2);
var arr3 = new Array(1,2);//当传两个或以上参数时,参数表示数组元素
console.log(arr3.length,arr3);
3.数组操作
push() 向数组的尾部追加元素,可以接受n个参数,返回数组的长度.
pop() 从数组的尾部删除一个元素,不接受参数,返回删除的元素,原数组发生改变。
unshift() 向数组的头部追加元素,可以接受n个参数,返回数组的长度。
shift() 从数组的头部删除一个元素,不接受参数,返回删除的元素,原数组发生改变。
slice() 截取数组,接受最多两个参数,如果没有参数,返回原数组
//一个参数,从该参数对应的索引开始截取,直至结束
//两个参数,从第一个参数对应的索引开始截取,到第二个参数对应的索引结束,但不包括第二个参数对应索引位的元素splice() 截取数组
//一个参数,从该参数对应的索引开始截取,直至结束,返回截取的数组,原数组发生改变
//两个参数,从第一个参数对应的索引开始截取,截取第二个参数表示的个数(长度),返回截取的数组,原数组发生改变
//第三个及以上的参数会被添加原数组当中,注意,是从截取开始的索引位添加reverse() 数组翻转,不接受参数,原数组发生改变。
sort() 数组排序
arr.sort(function(a,b){
//return a - b;从小到大
return b - a;//从大到小
})
console.log(arr);join() 将数组转换成字符串,以参数来进行拼接。
concat() 把多个数组合并成一个数组.
4.数组的遍历
var arr = [1,2,3,4];
console.log(arr[0],arr[1]);
for(var i = 0; i < arr.length; i++){
console.log(arr[i]);
}
for(var i in arr){ //i对应索引
//document.write(i+"=>"+arr[i]+"<br>");//key=>value
console.log(i,arr[i]);
}
for in 遍历对象比较多;
var obj = {name:"john",age:20,score:[1,2,3,4]};
for(var i in obj){
//console.log(i,obj.i);//obj.i 会认为obj中有一个属性名为i,实际上是没有的,i是一个变量
//i这个变量对应的是属性名name和age
//console.log(i,obj[i]);//第一次遍历 i=="name" obj["name"] 第二次遍历时 i=="age" obj["age"]
}
5.数组排序
5.1 sort
sort() 数组排序 //默认字符串排序
arr.sort(function(a,b){ //数字排序
//return a - b; 从小到大
return b - a; //从大到小
})
console.log(arr);
5.2 冒泡排序
var arr = [2,44,3,6,39,99,33,1,54];
//冒泡排序从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。n个数,经过n-1轮比较后完成排序。
function bubbleSort(arr){
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]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
console.log(bubbleSort(arr));
5.3 选择排序
/*选择排序
每次遍历确定一个最小值,
第几次遍历就把这个最小值放在数组的第几个位置
然后从后面的元素再次获得最小值,在放到数组前端,
重复上两个步骤,知道遍历到数组的最后一个元素
有多少个元素,就要遍历多少次*/
function selectSort(arr){
for(var i = 0;i < arr.length -1 ;i++){//轮数
var minIndex = i; //假定第一个数为最小值
for( var j = i+1; j<arr.length;j++){//比较次数
if(arr[minIndex]>arr[j]){
minIndex = j;
}
}
var temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
console.log(selectSort(arr));
6. 堆栈及参数传递
js内存分为堆区和栈区。
基本类型:
存放在栈内存中的简单数据段,数据大小确定,内存空间大小可以分配
5种基本数据类型:undefined,Null,Boolean,Number和String,它们是直接按值存放的,所以可以直接访问
引用类型:
存放在堆内存中的对象,变量实际保存的是一个指针,这个指针指向另一个位置。每个空间大小不一样,要根据情况进行特定的分配。
当我们需要访问引用类型(如对象,数组,函数等)的值,首先从栈中获得该对象的地址指针,然后从堆内存中取得所需要的数据
var a1 = [10];
var b1 = a1;
a1.push(20);
console.log(a1,b1);//[10,20] [10,20]
7.json格式
var data = {"name":"john","age":20};//标准json对象,属性名必须加双引号
var obj = {name:"john",age:20};//json格式的数据
var arr = [1,2,3];//json格式的数据
8. 小练习
<script type="text/javascript">
//定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。
var arr = [];
var NewArr = [];
var average = 0;
arr.length = 30;
for(var i = 1; i <= arr.length; i++)
{
arr[i - 1] = 2*i;
//将arr赋值 arr[i - 1] 是因为数组下标从0开始
if(i % 5 !== 0)
//做判断使之五个数为一组然后将每组的平均值放入另一个数组中
{
average += arr[i - 1];
}else
{
NewArr.push(average/5);
average = 0;
}
}
document.write(arr);
document.write("<br />");
document.write(NewArr);
</script>