1,数组的概念:
数组是一种空间,主要是用来存储批量数据的空间。
2,数组的语法:
var a=[1,2,3];//使用直接量创建数组
数组的名称:a
数组的元素:1 2 3
数组中排第一位的序号是:0,那么0这种序号被称为数组的下标号。
<script>
var arr=[1,2,3,4];
//alert(arr[0]);//数组元素的读取,利用数组的名称[数组元素的下标号]来读取元素
//数组元素的添加,就是利用数组的下标号来进行赋值的方式添加或者修改
arr[3]=12;
console.log(arr);
</script>
3,数组的元素类型:在同一个数组中,元素的数据类型可以是不一样的。数组内的元素也可以是数组。
4,数组长度的获取:length
语法:arr.length//返回的结果是一个统计了数组中元素的数量。
练习:输出数组中所有的元素。
5,无序的数组,但是我们需要得到一个从小到大的数组。
冒泡排序:
var arr=[5,2,9,8,1,7,6,3,4];\
冒泡排序实际上就是一种按照从小到大的顺序排列数组元素的。一帮常用语数字类型的数组。
冒泡排序的原理,就是使用两个for循环从同一个数组中任意取出一个元素进行大小对比,通过值的转换,将小的元素
排在大的元素之前。
代码如下:
var arr=[5,2,9,8,1,7,6,3,4];
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
var c=arr[j];
arr[j]=arr[i];
arr[i]=c;
}
}
}
console.log(arr);
数组中的内置方法:
数组的底部插入和底部删除。
push(元素,元素);
数组名称.push(元素,元素);//这种方法是在数组的尾部自动增加元素,无法修改元素。
和数组名称[i]="元素";//一次添加一个元素,但是可以修改已经存在的元素。
arr.pop();
在数组的底部取出元素。圆括号内没有参数,默认为取出数组中最后的一个元素。
如果我们需要连续删除每个元素从后面往前删除的话,我们需要结合循环进行删除。
栈存储,同时使用push,pop两种方法对数组进行修改的,我们将这种数据修改称为栈存储。
表现出来的数据存储顺序为后进,先出

在数组的头部删除或者插入元素,
在头部删除:arr.shift()
面试题:
写出pop(),push(),shift(),unshift()的作用和区别。
练习题:
总共15张票,排在奇数位的人都选择放弃买票。那么你的排位是32,
请问你能否买到票。如果能买到,你是第几个买到票,如果不能你应该排在第几位。
arr.sort(自定义排序规则);
sort排序是根据Unicode编码进行升序排列。所以直接利用sort排序无法解决9以上数字的排序。此时我们就需要对sort排序进行自定义排序规则
var arr=[3,4,1,5,2,8,6,9,7,12,15,35];
arr.sort(function(a,b){return a-b;});
document.write(arr);
//sort排序中的自定义排序,只能对数字类型进行排序。
//如果对字符串进行排序直接使用sort()方法即可。
回调函数:直接写在方法圆括号内的函数被称为回调函数。

其他的数组预定义方法:
数组拼接:concat();
这个拼接和push()的区别是:arr.concat(元素)是将原来数组arr和新添加的元素拼接形成新数组,老数组就需要手动清空。
push();是在原数组基础上进行元素 内容添加修改。
var arr=[1,2,3,4,5];
arr=arr.concat(6,7);
console.log(arr);
//手动清空原数组
var arr=[1,2,3,4,5];
var b=arr.concat(6,7);
console.log(b)
arr=null;
join()合并;
var arr=[1,2,3,4,5];
arr=arr.concat(6,7);
console.log(arr);
console.log(arr.join());//不加双引号,代表将数组中的全部元素输出
console.log(arr.join(""));//增加了双引号,代表将元素拼接在一起输出。
截取:slice(start,end):
slice()截取在内存变化中,实际上在原数组基础上,将截取的新元素重新创建一个新数组出来。老的数组如果不用就
手动清楚,清空内存。
slice截取元素依靠元素的下标来实现截取的范围。start是指开始的那个元素的下标号,
end是所需截取的最后一个元素的下一位元素的下标。
var arr=[1,2,3,4,5,6,7,8,9];
arr.slice(1,3);//所截取的数组是[2,3];
var arr=[1,2,3,4,5];
arr=arr.concat(6,7);
console.log(arr);
console.log(arr.join());//不加双引号,代表将数组中的全部元素输出
console.log(arr.join("!"));//增加了双引号,代表将元素拼接在一起输出。
console.log(arr.slice(0,4));//新建一个新的子数组,原来的老数组依然存在。
console.log(arr);
console.log(arr.toString(""));//和join的相同点和区别点:
//join(“”)相当于将每个元素转化为字符串并且拼接起来。join();直接将数组转化为字符输出不拼接。
//arr.toString()加不加双引号都是直接将数组转化为字符串输出,不拼接。
以上的数组方法均为内置方法:厂家已经定义好的方法我们直接使用就可以实现效果的。
需要我们自己一个代码处理过程的程序,这样的方法叫做自定义方法。
console.log(arr.slice(1,))//从第二位开始,一直到数组的最后一个元素全部截取。
function slice(a,b){
var arr=[1,2,3,4,5,6];
var c=[];
for(var i=a;i<b-a;i++){
c.push(arr[i]);
}
}
slice(0,null)
一维数组的概念:一个数组中,元素即数据本身,这种是一维数组。
但是我们数组中元素可以是子数组。这样的数组形态称为多维数组。例如:
arr=[[1,2,3,4],["a","b","c"]];
二维数组的读取:
arr[0][1]//取的就是第一个子数组中的第二个元素

在我们学习一维数组,二维数组中,存在下标号呈现规律出现的数字形态,这样的数组我们成为“索引数组”;
hash数组:
我们又叫做关联数组。表现形态是呈现键值对的形态;
var arr=[name:"tom",age:18];这就是一个典型的hash数组。
hash和索引数组的区别是什么?
1,hash数组从算法上就会自动排除数组的重复元素。它开辟存储元素的空间是以键名作为房间号,
hash数组没有数组长度属性,下标号没有规律性,
2,索引数组,下标号自动规律出现,数组中一般直接显示元素内容不显示下标号,数组中允许出现重复元素。索引数组有长度属性。
hash数组的创建:
var arr=[];
arr[name]="tim";
arr[age]=21;
hash 数组的元素添加中和索引数组添加元素方式一样的,都是采用arr[下标号]=“元素内容”的方式添加。
hash数组不重复的原理;
因为给数组添加元素元素相当于给变量赋值,如果出现同一个键名的话,它的值是以最新的为准

hash数组的循环遍历:for in
因为hash数组没有数组长度,所以常规循环用起来非常麻烦,所以我们使用for in循环遍历输出hash数组中的键值对。
语法:for(var key in arr){arr[key]}
创建hash数组的方法不同所带来的结果是不同的。
var arr=[name="tom",age=21]//此时返回的是一个索引数组。
此时的name相当于变量名称name,不是一个下标号

var brr=[];
brr["name"]="tom";//此时返回的结果就是一个hash数组,元素呈现:name:tom的键值对形态。
brr下的"name"是自定义出来的

练习题:arr=[1,2,3,47,5,,78,852,7]
转化为hash数组