数组的各种方法和用法
一:数组的概念
- 数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式。
- 数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。数组是一种将一组数据存储在单个变量名下的优雅方式。
二:创建数组
-
字面量:关键字 标识符 赋值符号 中括号 let arr1 = [];
-
构造函数:关键字 标识符 赋值符号 new Array() let arr2 = new Array();
三:栈和堆的区别
-
栈:存储的是基本数据类型的值,或者引用数据类型的地址 -
堆:存储引用数据类型的数据,并创建一个地址,与栈关联(通过指针),即:并返回这个数据的地址,给栈 let str = 123;
let str1 = 'as';
let arr = [];
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CKWkChBu-1643288659580)(E:\js\4.1.png)]
四:属性和方法
书写格式1:对象.属性名
书写格式2:对象.方法名(实参)
-
方法会有小括号,属性没有 -
一般情况下都是给引用数据类型使用 -
都会有返回值(属性或方法的结果)
let arr = [];
console.log(arr);
let len = arr.length;
console.log(len);
let result = arr.push('er','er',43,null);
console.log(arr,result);
五:[增]
-
书写格式1:数组名,unshift(数据)
-
注:数据可以是多个 -
功能:在数据前添加1个或多个数据 -
返回值:新增后数组的长度(数据的个数)
let arr1 = [1,2,3];
let result1 = arr1.unshift('a','b');
console.log(arr1,result1);
-
书写格式2:数组名,push(数据)
-
注:数据可以是多个 -
功能:在数据前添加1个或多个数据 -
返回值:新增后数组的长度(数据的个数)
let arr1 = [1,2,3];
let result2 = arr1.push('dd');
console.log(arr1,result2);
六:[删]
- 书写格式1:数组名.shift()
- 注:每次只能删除一个数据
- 功能:删除数组第一个数据
- 返回值:返回删除的那个数据
let arr1 = [1,2,3];
let result3 = arr1.shift();
console.log(arr1,result3);
- 书写格式2:数组名.pop(数据)
- 注:数据可以是多个
- 功能:删除数组最后一个数据
- 返回值:返回删除的那个数据
let arr1 = [1,2,3];
let result4 = arr1.pop();
console.log(arr1,result4);
七:[改]
- 书写格式1:数组名[下标] 赋值符号 修改的值
- 注:下标或索引的起始值是0,即数组的第一个值下标为0,第二个下标为1,以此类推。
let arr2 = ['q','w','e'];
arr6[1] = 3;
console.log(arr6);
八:[查]
- 书写格式1:数组名.includes(查找的数据)
- 返回值:Boolean,存在返回true,不存在返回false
let arr3 = ['1','2','3','4','5','6','1'];
let result5 = arr7.includes('3');
console.log(result5);
result5 = arr7.includes('7');
console.log(result5);
- 书写格式2:数组名.indexOf(查找的数据)
- 返回值:从数组的第一个值向后查找,返回第一个与数据相同的值的下标。不存在返回-1(从前往后开始找)
let arr3 = ['1','2','3','4','5','6','1'];
let result5 = arr7.indexOf('1');
console.log(result5);
- 书写格式3:数组名.lastIndexOf(查找的数据)
- 返回值:从数组的最后一个值向前查找,返回第一个与数据相同的值的下标。不存在返回-1(从后往前找)
let arr3 = ['1','2','3','4','5','6','1'];
let result5 = arr7.lastIndexOf('1');
console.log(result5);
九:数组的遍历
-
for…in:遍历数组的下标
for(let index in arr){
console.log(index);
}
-
for…of:遍历数组的值(存储的数据)
for(let value of arr){
console.log(value);
}
-
直接循环 let arr4 = ['1','2','3','4','5'];
for(i=0;i<arr9.length;i++){
console.log(arr9[i]);
}
十:批量获取数据slice
- 书写格式:数组名.slice(参1,参2)
- 1个参数:从参数小标开始取到数组的最后一个值
- 2个参数:
- 参1代表起始下标
- 参2代表结束下标
- 但不包含参2的值
- 注:
- 1.若参数的下标不符合规范(不满足条件),则返回空数组
- 2.若参数为负数,则用数组长度与其相加
- 3.不会改变原数组的数据
let arr5 = ['1','2','3','4','5','6'];
let temp = arr5.slice(1);
console.log(temp);
temp = arr5.slice(2,5);
console.log(temp);
temp = arr5.slice(-4)
console.log(temp);
console.log(arr5);
十一:splice
- 书写格式:数组名.splice(参1,参2,参3…参n)
- 返回值:Array(返回被删除或修改的数据)
- 1个参数:从参数小标开始取到数组的最后一个值
- 2个参数:
- 参1代表起始下标,
- 参2代表结束下标,
- 但不包含参2的值
- n个参数:
- 参1代表起始下标,
- 参2代表:0代表插入,非0代表修改个数,
- 参数3到参n代表插入或修改的数据
- 注:
- 1.若参数的下标不符合规范(不满足条件),则返回空数组
- 2.若参数为符数,则用数组长度与其相加
- 3.会改变原数组的数据
let arr10 = ['a','b','c','d','e','f'];
let temp = arr10.splice(2);
console.log(temp);
console.log(arr10);
let temp = arr10.splice(3,0,1);
console.log(temp);
console.log(arr10);
let temp = arr10.splice(3,2,1)
console.log(temp);
console.log(arr10);
let temp = arr10.splice(3,3,1,2)
console.log(temp);
console.log(arr10);
十二:多维数组
let arr1['1','2','3'];
let arr2['5','6','7'];
let arr3[arr1,arr2];
console.log(arr[0][1]);
十三:倒叙输出reverse
- reverse倒序输出数组的数据
- 书写格式:数组名.reverse()
- 返回值:倒序后的数组
let arr1 = ['1','2','3','4'];
console.log(arr1.reverse());
十四:数,字(相互转换)split
- 数组与字符串之间的相互转换
- 书写格式:字符串.split(分隔符)
- 注:如果没有写分隔符则把字符串当成一个整体存入数组
let str = '2022-1-20';
let str1 = '2022:1:20';
let arr = str.split('-');
let arr1 = str1.split(':');
console.log(arr,arr1);
字符串转数组
-
通过下标循环来操作 let submit = 'username=zhansan&pwd=123&gender=male';
let str = submit.split('&');
let arr1 = [];
for(let index in str){
let str1 = str[index].split('=');
arr1.push(str1[0],str1[1]);
}
console.log(arr1);
-
通过值来循环操作 let submit = 'username=zhansan&pwd=123&gender=male';
let arr2=[];
for(let value of str){
let str2 = value.split('=');
arr2.push(...str2);
}
console.log(arr2);
数组转字符串
let arr1=[ 'username', 'zhansan', 'pwd', '123', 'gender', 'male' ]
let str11= "";
for(let index in arr1){
if(index%2==0){
str11 += arr1[index];
}else{
index == arr1.length-1?
str11 += '='+arr1[index]:
str11 += '='+arr1[index]+'&'
}
}
console.log(str11);
十五:扩展运算符...
-
功能:既能转换成字符串,也能转换数组 -
还可以用来连接字符串 let str3 = [1,2,3];
console.log(...str3);
let str4 = "123";
console.log(...str4);
let str5 = [1,2,3];
let str6 = ['a','b','c'];
let str7 = [...str5,...str6]
console.log(str7);
十六:数组的合并 concat
-
书写格式:数组A.concat(数组B); -
返回值:返回一个新的数组(即A和B合并,A数据在前,B数据在后) let str5 = [1,2,3];
let str6 = ['a','b','c'];
let str8 = str6.concat(str5);
console.log(str8);
十七:数组转字符串join
- 书写格式:数组.join(‘分隔符’)
let a=['2020','1','20'];
let str=a.join('/');
十八:复制copyWithin
- 书写格式:数组名.copyWithin(参1,参2,参3);
- 参1:目标下标(即把拷贝的数据,放置的下标)
- 参2:拷贝数据的起始下标
- 参3:拷贝数据的结束下标(不包含)
- 注1:如果没有给定参数3,则从参数2一直取到数组的最后一个值
- 注2:会改变原数组
- 返回值:返回一个数组(添加拷贝数据后的新数组)
let arr = ['A','B','C'];
console.log(arr.copyWithin(1));
console.log(arr.copyWithin(0,1));
console.log(arr.copyWithin(0,1,1));
console.log(arr.copyWithin(0,1,2));
十九:数据填充fill
- 书写格式:数组名.fill(参1,参2,参3);
- 参1:填充的数据
- 参2:填充的数据的起始下标
- 参3:填充的数据结束下标(不包含)
- 注1:如果没有给定参数3,则从参数2一直填充到数组的最后一个值
- 注2:会改变原数组
- 返回值:返回一个数组(填充数据后的结果)
let arr = ['a','b','c'];
let result = arr.fill(1,2,3);
console.log(result);
二十:快速清空数组的方法
arr = [];
arr.splice(0)
arr.length = 0;
console.log(arr);
|