【数组的概念】
- 所谓数组,就是将多个元素按一定顺序排列放到一个集合中,这个集合我们就称之为数组。
【数组的创建】
1、通过数组字面量
var arr1 = []; // 创建一个空数组
var arr2 = [1, 2, 3, 4,'a']; // 创建一个包含3个数值的数组,多个数组项以逗号隔开
2、通过构造函数Array()
//调用时没有参数:
var a = new Array(); //创建一个空数组
var arr=new Array(1, 2, 3, 4,'a');
【数组元素的读和写】
数组的下标
// 格式:数组名[下标] 下标又称索引
// 功能:获取数组对应下标的那个值,如果下标不存在,则返回undefined。
var arr = ['red', 'green', 'blue'];
arr[0]; // red
arr[2]; // blue
arr[3]; // 这个数组的最大下标为2,因此返回undefined
【读:数组名[下标]】
注意:这里下标是从0 开始的。
【写:数组名[下标] = 值】
注意:如果声明的长度大于写的下标,则正常写入,但是长度会发生变化
【数组长度】
var arr = ['a', 'b', 1, 2, 3];
arr.length // 5
console.log(arr);
【数组中常用的方法】
push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度
// var arr=[0,1,2,3,4,5,6,7,8,9];
// arr.push('泰国','新加坡','可添加多个元素'); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "泰国", "新加坡", "可添加多个元素"]
// console.log(arr);
**pop() 方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。 **
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.pop(); //[0, 1, 2, 3, 4, 5, 6, 7]
var s = arr.pop(); //8,在尾部删除第一个元素,并获取删除的内容
console.log(arr);
console.log(s);
shift() 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。
// var arr=[0,1,2,3,4,5,6,7,8,9];
// arr.shift(); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
// console.log(arr);
unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度。
// var arr=[0,1,2,3,4,5,6,7,8,9];
// arr.unshift('中国'); //["中国", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// console.log(arr);
join() 方法将一个数组的所有元素连接成一个字符串并返回这个字符串。
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var str = arr.join('-'); //[0-1-2-3-4-5-6-7-8-9]
console.log(str);
reverse() 方法将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组。
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.reverse(); //[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
console.log(arr);
sort()对数组进行排序
var arr=[12,33,55,66,22,77,8.9];
arr.sort(function(a,b){
return a-b;
});
console.log(arr);
concat数组元素拼接
var arr6=[12,33,55,66,22,77,8.9];
var arr7=[12,33,55,66];
var arr8=arr6.concat(arr7);
console.log(arr8);
splice删除或替换现有元素或添加新的元素来修改数组
var arr9=[12,33,55,66,22,77,8.9];
arr9.splice(3); //删除3号元素后所有的元素(包括3号)
console.log(arr9);
arr9.splice(2,1) //删除2号元素以后的第一个元素
console.log(arr9);
arr9.splice(2,1,'新增的','新增的'); //删除2号元素一个元素,增加'新增的','新增的'亮相内容
console.log(arr9);
**slice()选取数组的一部分,并返回一个新数组,包左不包右
var arr9=[12,33,55,66,22,77,8.9];
console.log(arr9);
var newArr = arr9.slice(2, 5); //选取数组的一部分,并返回一个新数组,包左不包右
console.log(newArr);
var arr=[12,12,33,33,55,66,22,77,8.9];
console.log(arr);
var str=arr.slice(1,4);
console.log(str);
【数组遍历】
//第一种方法:
var arr = [0,1,2,3,4,5,6,7,8,9];
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
//第二种方法:
var arr = [0,1,2,3,4,5,6,7,8,9];
for(var key in arr){
console.log(arr[key]);
}
【数组去重】
indexOf() 匹配到要寻找的元素在数组中第一次出现的索引值,找到则返回索引值,找不到则返回-1
var arr=[12,12,33,33,55,66,22,77,8.9];
console.log(arr);
var newArr=[];
for(var i=0;i<arr.length;i++){
if(newArr.indexOf(arr[i])==-1){
newArr.push(arr[i]);
}
}
console.log(newArr);
【数组排序】
// var arr=[12,33,55,66,22,77,8.9];
// arr.sort(function(a,b){
// return a-b;
// });
// console.log(arr);
【数组检验】
var arr=[1,2,3];
var str='123';
//第一种方法 instanceof
console.log(arr instanceof Array);//true
console.log(str instanceof Array);//false
//第二种方法 Array.isArray()
console.log(Array.isArray(arr));//true
console.log(Array.isArray(str));//false
【二维数组】
//定义
var arr=[];
arr[0]=['a','b','c'];
arr[1]=[1,2,3];
//访问
console.log(arr[0]); //["a", "b", "c"]
console.log(arr[0][0]); //a
【案例👇】
//数组去重案例
var arr=[12,12,33,33,55,66,22,77,8.9];
console.log(arr);
var newArr=[];
for(var i=0;i<arr.length;i++){
if(newArr.indexOf(arr[i])==-1){
newArr.push(arr[i]);
}
}
console.log(newArr);
// 将一个数组2,3,4,5,1,65,3,1进行反转[1, 3, 65, 1, 5, 4, 3, 2]
arr = [2, 3, 4, 5, 1, 65, 3, 1];
arr.reverse();
for(var i=0;i<arr.length;i++){
document.write(arr[i]+' ')
}
//将一个数组[1,2,3,4,5]转换成字符串1-2-3-4-5
var arr=[1,2,3,4,5];
var str=arr.join('-');
console.log(str);
//找出数组中同时能被2和3整除的数,并求和
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var sum = 0;
for (var i = 0; i <arr.length-1; i++) {
if (arr[i] % 2 == 0 && arr[i] % 3 == 0) {
sum += i;
}
}
console.log(arr[i]);
//arr=[1,2,3,4,,,3,45,65,'dji']去除未定义的值
var arr = [1, 2, 3, 4, , , 3, 45, 65, 'dji'];
var newArr = [];
for (var i = 0; i <= arr.length - 1; i++) {
if (arr[i] != undefined) {
newArr.push(arr[i]);
}
}
console.log(newArr);
//去除数组中的重复元素,arr=['w','d','b','d','w']
var arr = ['w', 'd', 'b', 'd', 'w'];
var newArr = [];
for (var i = 0; i <= arr.length-1; i++) {
if (newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i]);
}
}
console.log(newArr);
//自己建立一个数组,删除第一个和最后一个元素
var arr = [1, 2, 3, 4, 5, 6, 7, 8];
arr.pop();
arr.shift();
console.log(arr);
//给数组arr=[16,13,42,24,26,18,90]排序
var arr=[16,13,42,24,26,18,90];
arr.sort(function(a,b){
return a-b;
});
console.log(arr);
/*请用数组实现:已知歌唱选手的分数为90,70,80,60,95,85,70现要求出该选手的最后成绩,
计算方式为去掉最高分和最低分在求平均分,并打印*/
var arr = [90, 70, 80, 60, 95, 85, 70];
arr.sort(function (a, b) {
return a - b;
});
var zg = arr.pop();
var zd = arr.shift();
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
document.write('最高' + zg);
document.write('最低' + zd);
document.write('平均分' + sum / arr.length);
// 找出数组arr=[1,4,6,3,6,7,12,34,5,67,78,1]中的最大值
var arr=[1,4,6,3,6,7,12,34,5,67,78,1];
arr.sort(function(a,b){
return a-b;
});
console.log(arr[arr.length-1]);
/*定义一个函数传入一个元素是名字和数字的数组,例如:arr=['李白',123, '杜甫', '王维',45,657, '李清照'];
把所有字符串类型的数组,放到一个新数组中,并用for循环遍历出来,格式为'著名诗人某某'*/
var arr = ['李白', 123, '杜甫', '王维', 45, 657, '李清照'];
function f() {
var newArr = [];
for (var i = 0; i <= arr.length - 1; i++) {
if (typeof arr[i] == 'string') {
newArr.push(arr[i]);
}
}
for (var i = 0; i < newArr.length; i++) {
document.write('著名诗人:' + newArr[i] + '<br>');
}
}
f();