**声明数组**
1、通过new创建数组
参数:传入任意的数据,存储到数组中
var arr = new Array(100,true,"hello");
alert(arr);
2、省略new运算符创建数组
var arr = Array(100,true,"hello");
alert(arr);
3、数组常量进行赋值(JS一般使用中括号[])
var arr = [100,true,"hello"];
alert(arr);
以上三个,结果都是下面这张图
声明长度为10的数组,数组中没有数组
var arr = new Array(10);
alert(arr);
等价于
var arr = Array(10);
alert(arr);
var arr2 = [10];
alert(arr2);
数组的属性:
数组.length 返回值数组[元素]的个数
元素:将数组存储的每一个数据,叫做数组的元素
访问数组的元素:
数组[下标] 下标是从0开始的
<script>
var arr = [100,true,"hello"];
for(var i = 0;i<arr.length;i++){
document.write(arr[i]+ "<br/>");
}
</script>
Math..random() 随机[0,1)
随机0~9的整数
parseInt(Math.random() * 10)
<script>
var arr = new Array(10);
for(var i=0;i<arr.length;i++){
arr[i] = parseInt(Math.random() * 10);
}
alert(arr);
</script>
for循环
<script>
var arr = [10,20,30,40,50];
//在页面上分别将每一个数输出
for(var i = 0; i < arr.length; i++){
document.write(arr[i] + "<br/>");
}
</script>
for…in遍历 快速遍历、快速枚举
<script>
var arr = [10,20,30,40,50];
for(var i in arr){
document.write(arr[i] + "<br/>");
}
</script>
数组的方法
栈结构:从同一头进,从同一头出
特点:先进后出
数组的两个方法形成栈结构:
push
格式:数组.push(参数,参数2…);
功能:给数组的末尾添加元素
返回值:插完元素以后数组的长度
pop
格式:数组.pop()
参数:没有参数
返回值:取下一个元素
功能:从数组末尾取下一个元素
<script>
var arr = ["北京", "上海"];
arr.push("成都");
alert(arr);
</script>
<script>
var arr = ["北京","上海","广州"];
var res = arr.pop();
alert(res);
alert(arr);
</script>
队列结构
结构:从末尾进,从头部出
特点:先进先出
push
格式:数组.push(参数,参数2…);
功能:给数组的末尾添加元素
返回值:插完元素以后数组的长度
shift()
格式:数组.shift()
参数:没有参数
功能:从数组的头部取下一个元素
返回值:取下的元素
unshift()
格式:数组.unshift(参数,参数2…);
功能:从数组的头部插入元素
返回值:插完元素以后的长度
<script>
var arr = ["唐朝","元朝","清朝"];
var res = arr.shift();
alert(res);
alert(arr);
</script>
<script>
var arr = ["唐朝","元朝","清朝"];
var res = arr.unshift("隋朝","商汤");
alert(res);
alert(arr);
</script>
concat()
1、拷贝原数组,生成新数组
2、合并数组
格式:数组.concat(数组,数据…)
返回值:合并成的新数组,原数组不会改变
<script>
var arr1 = [10,20,30];
var arr2 = [50,60,70];
var newArr = arr1.concat(arr2,"hello",true);
alert(newArr);
alert(newArr.length);//8
alert(arr1);//10,20,30
</script>
splice()
格式:数组.splice(start,length,数据1,数据2…)
参数:start 开始截取的长度
length 截取的元素的长度
第三个参数开始:在start位置,插入的元素
返回值:截取下来的元素组成的数组
增加
<script>
var arr = [10,20,30,40,50];
var res = arr.splice(2,0,"hello");
alert(arr);
alert(res);
</script>
删除
<script>
var arr = [10,20,30,40,50];
var res = arr.splice(1,2);
alert(arr);
alert(res);
</script>
修改(先删除,在修改)
<script>
var arr = [10,20,30,40,50];
var res = arr.splice(2,1,"hello");
alert(arr);
</script>
slice()方法
格式:数组.slice(start,end);
注意:范围是[start,end) end不包括
返回值:生成的新数组,原数组不会发生任何的改变
<script>
var arr = [10,20,30,40,50,60];
var newArr = arr.slice(1,4);
alert(newArr);
alert(arr);
</script>
join()
格式:数组.join(字符串)
功能:将数组中的元素,用传入的拼接符,拼接成一个字符串
返回值:拼接好的字符串
<script>
var arr = [10,20,30];
var str = arr.join("xxx");
alert(str);
alert(arr);
</script>
reverse 逆序
<script>
var arr = [true,"hello",100];
arr.reverse();
alert(arr);
</script>
数组排序
sort
格式:数组.sort()默认按照字符串从小到大排序
参数:一个函数,代表要怎么去进行排序(固定用法)
从小到大
<script>
var arr = [1,10,20,15,25,5];
arr.sort(function(value1,value2){
return value1 - value2;
})
alert(arr);
</script>
从大到小 排序输出
<script>
var arr = [1,10,20,15,25,5];
arr.sort(function(value1,value2){
return value2 - value1;
})
alert(arr);
</script>
练习
<script>
var arr1 = [10,20,30,40];
var arr2 = arr1.concat();
arr2.push(50,60);
alert(arr1);
alert(arr2);
</script>
二维数组
<script>
var arr1 = [10,20,30];
var arr = [true,100,"hello",arr1];
alert(arr.length);
alert(arr[3] == arr1);
alert(arr[3]);
alert(arr1[1]);
alert(arr[3][1]);
</script>
通过循环按行顺序为一个5x5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角
<script>
var arr = [
[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20],
[21,22,23,24,25]
];
for(var i = 0; i < arr.length;i++){
for(var j = 0;j < i;j++){
if(i>=j){
document.write(arr[i][j] + " ");
}
}
document.write("<br/>");
}
</script>
冒泡排序:
规则:前后两个数两两进行比较,如果符合交换条件就交换两个数位
分析:比较轮数 = 数组长度 - 1;
每一轮比较的次数 = 数组长度 - 当前的轮数
<script>
var arr = [9,8,7,6,5,4];//从小到大
for(var i = 0;i < arr.length-1;i++){
//每一轮比较的次数
for(var j = 0;j < arr.length-(i+1); j++) {
if(arr[j] > arr[j+1]){
//交换两个数位置
var tmp = arr[j];
arr[j] = arr[j+1];
arr[j + 1] = tmp;
}
}
}
alert(arr);
</script>
选择排序(打擂台法)
规则:选出一个位置,这个位置上的数,和后面所有的数进行比较,如果比较出大小就叫交换两个数位置
规律:每一轮都能选出一个最小的数,放在正确的位置。
比较的轮数 = 数组长度 - 1
每一轮比较的次数 = 数组长度 - 当前的轮数
<script>
var arr = [9,8,7,6,5,4];
for(var i=0;i<arr.length-1;i++){
//被比较数的下标
for(var j = i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
alert(arr);
</script>
数组练习
随机给出一个五位以内的数,然后输出该数共有多少位,每位分别是什么
<script>
function countNum(num){
//声明一个数组,存放取下的数
var arr = [];
while(num){
arr.push(num % 10);
num = parseInt(num / 10);
}
arr.reverse();
alert("一共是: "+arr.length + "位" +", 每一位分别是" + arr);
}
countNum(12345);
</script>
编写函数has(arr,60) 判断数组中是否存在60这个元素,返回布尔类型
<script>
function has(arr,item){
for(var i = 0;i < arr.length; i++){
if(arr[i] == item){
return true;
}
}
return false;
}
alert(has([10,20,30], 50));
</script>
严格模式:写在哪个作用域下,在哪个作用域下生效
“use strict
”
[注]尽量注意不要严格模式写在全局
用了严格模式,会有什么交集:
1、全局变量声明时,必须加var
新增数组的方法
indexof()
格式:数组.index(item,start);
参数:item任意的数据
start 下标 可以不传入,默认是0
功能:在数组中查找第一次出现item元素下标,从start开始去查找
返回值:-1 没有查找到
>=0 查找到的元素的下标
<script>
var arr = [10,20,30,40,50,20,30];
var index = arr.indexOf(120,2);
alert(index);
</script>
数组遍历:for循环
for....in
forEach(ECMA5新增)
<script>
var arr = [10,20,30,40,50];
arr.forEach(function(item,index,arr){
// item当前遍历到的数组
// index当前遍历到元素的下标
// arr数组本身
document.write(item + ","+index + ","+arr + "<br/>");
});
</script>
map
映射
<script>
var arr = [10,20,30,40,50];
var newArr = arr.map(function(item,index,arr){
//遍历要做的事情,映射关系
return item*1.3;
});
alert(newArr);
alert(arr);
</script>
filter
()过滤
<script>
var arr = [10,20,30,40,50];
var newArr = arr.filter(function(item,index,arr){
return item>20;
});
alert(newArr);
alert(arr);
</script>
some
某些
【注】在数组中查找是否符合条件的元素,有返回true,没有返回false
短路操作:只要找到符合条件的元素,后面的循环就停止了。
<script>
var arr = [10,20,30,40,50];
var res = arr.some(function(item,index,arr){
alert(item);
//过滤的条件
return item>10;
});
alert(res);
alert(arr);
</script>
every
每一个
【注】在数组中查找每一个元素是否有符合条件,符合返回true,不符合返回false
短路操作:只要找到不符合条件的元素,后面的循环就停止了
<script>
var arr = [10,20,30,40,50];
var res = arr.every(function(item,index,arr){
alert(item);
//过滤的条件
return item<20;
});
alert(res);
alert(arr);
</script>
reduce
归并
<script>
var arr = [10,20,30,40,50];
var res = arr.reduce(function(prev,next,index,arr){
// prev 第一次是下标为 0的元素
// 第二次开始 上一次遍历return的值
// next 从下标1开始,当前遍历别的元素
// arr数组本身
alert(prev + ", " + next);
return prev + next;
});
alert(res);
</script>