常用数组方法
数组长度
arr.length 获取数组的长度
arr.length-1 获取数组的最后一位值
arr.length = 0 / arr = [] 置空数组
多维数组
var arr=["a",["b","c"]];
console.log(arr[1][1]);//得到了c
// 一维数组是有一个[],多维数组有n个[]
//数组访问数组元素是根据索引访问的,索引从0开始
//arr[1]==["b","c"] arr[1][1]=="c"
数组创建和Array.of()方法
// 使用new创建
var arr=new Array(1,2,3,4);
var arr1=new Array(2);
//[empty,empty] 表示数组的长度为2,里面是两个空的数组元素
// 使用字面量创建
var arr1=[5,6,7,8]
// 修改数组元素的值
var arr=[1,2,3];
var b =arr;
b[1]=4;//[1,4,3]
数组是引用类型, 使用了同一个内存地址,这是引用类型的特性,即是浅拷贝,值类型是把内存复制了一份,即是深拷贝
var arr=[1,2,3,4];
arr[6]=7;
console.log(arr);//[1,2,3,4, , ,7]
// 超出数组的长度,会在该位置添加值,但之前的值会为空
Array.of()
Array.of(参数1,参数2...) 可以放多个不同类型的值,创建可变数量的新数组
var arr1=new Array(6);//[6]
var arr2=new Array(1,2,3);//[1,2,3]
conlose.log(arr1.length,arr);//1 6
// Array.of()的作用就是创建一个长度为1 数值为6的数组
Array.of() 和 Array()的区别
Array.of() 和 Array 之间的区别在于处理整数参数:
Array.of(7) 创建一个具有单个元素 7 的数组,而 Array(7) 创建一个长度为7的空数组
注意:这是指一个有7个空位(empty)的数组,而不是由7个undefined组成的数组
数组类型检测
Array.isArray(参数)
//返回值为 true 或 false
console.log(Array.isArray([]));// true
instanceof 运算符,检测是否为数组
// 返回值为true或false
var arr=[1,2];
arr instanceof Array // true
Array.isArray优先于instanceof
数组类型转换
数组转为字符串
var arr=[1,2,3];
toString()方法
console.log(arr.toString());//string类型 1,2,3
String()方法
console.log(String(arr));//1,2,3
join(分隔符)
//把数组的所有元素放入字符串,元素可以指定分隔符分隔,省略参数,默认以逗号分隔
console.log(arr.join());//1,2,3
console.log(arr.join("|"));//1|2|3
以上方法的返回值都是一个字符串
伪数组转为真数组
Array.from() 将一个伪数组转换为真数组,有length属性的可以转
var str=123;
Array.from(str);//[1,2,3]
数组的增删改查
增加
push()和unshift()
var a=[1,2];
push()
a.push(3);//[1,2,3]
a.push(4,5,"q");//[1,2,3,4,5,"aa"]
/*
在数组最后追加元素
()里直接写参数,可以写多个参数
添加完毕后,返回的是新数组的长度
原数组也会发生变化
*/
unshift()
a.unshift("bb");//["bb",1,2,3,4,5,"aa"]
/*
在数组最前面追加元素
()里直接写参数,可以写多个参数
添加完毕后,返回的是新数组的长度
原数组也会发生变化
*/
删除
pop()和shift()
pop() 删除数组的最后一个元素
a.pop();//["bb",1,2,3,4,5]
/*
一次只删除一个
返回值为删除的元素
原数组也发生变化
()里没有参数
*/
shift() 删除数组的第一个元素
a.shift();//[1,2,3,4,5]
/*
一次只删除一个
返回值为删除的元素
原数组也发生变化
()里没有参数
*/
pop和push是一对栈操作
unshift 和 shift 是队列操作
slice() 数组截取
// 下标
slice[start,end)
返回截取的新数组
无法交换start和end位置
参数不写截取全部的数组
负值 是从后往前数[-2,-1)
可以将类数组转化为一个新数组
都是左闭右开的区间
var a=[1,2,3,4,5]
console.log(a.slice());//1,2,3,4,5
console.log(a.slice(1,3));//2,3
console.log(a.slice(-3,-1));//3,4
splice() 数组删除
splice([start(增加或删除的位置)],截取的个数,插入的元素[可以有多个])
返回 删除元素组成的数组
改变了原数组
没有参数的时候,返回空数组
只有一个参数,从当前位置到结束
第二个参数为0时,不删除
var a = [1, 2, 3, 4, 5]
var arr = [1, 2, 5, 3, 15, 20];
console.log(a.splice());//[]
console.log(a.splice(0, 5));//[1,2,3,4,5]
console.log(arr.splice(1, 1, "11"));[2]
console.log(arr);//[1,"11",5,3,15,20]
数组的迭代方法
在迭代里,如果有不需要的参数,可以省略不写
array.forEach()
在forEach里,return不会终止迭代
// 回调函数
array.forEach(function(currentValue,inedx , arr){})
/*currentValue:数组当前项的值
index:数组当前项的索引
arr:数组对象本身
*/
arr.forEach(function(value,index,arr){
console.log(value);
console.log(arr[index]);
})
array.map()
不会改变原数组,数组中的元素为原始数组元素调用函数处理后的值
返回一个新数组,为空时不会检测
array.map(function(currentValue,inedx , arr){})
/*
返回一个新数组,每个元素都是回调函数的结果
*/
var arr = [1, 2, 5, 3, 15, 20];
// map 遍历每一个数组,返回一个新数组
var map=arr.map(function(num){
return num+1;
})
console.log(map);//[2,3,6,4,16,21]
array.filter()主要用于筛选数组,找到符合条件的元素
在filter里,return不会终止迭代
返回一个满足条件的新数组
array.filter(function(currentValue,inedx , arr){})
/*
创建一个新数组,主要用于筛选数组,找到符合条件的元素
直接返回一个新数组,把所有满足条件的元素返回回来
*/
var arr = [1, 2, 5, 3, 15, 20];
var newArr = arr.filter(function (value, index, arr) {
// 返回的是一个新数组,用个变量接收数组
return value >= 10;
})
console.log(newArr);//15,20
array.some()查找数组中满足条件的元素是否存在
array.some(function(currentValue,inedx , arr){})
/*
用于查找数组中满足条件的元素是否存在,返回值是true或false
如果第一个就找到满足条件的元素,就会终止循环,不继续查找
遇到return true 就会终止遍历,效率较高
不会对空数组进行检测
不会改变原数组
*/
// 返回的是一个值,用个变量接收
var arr = [1, 2, 5, 3, 15, 20];
var flag=arr.some(function(value,index){
return value>=10;
})
console.log(flag);// true
array.every()判断每一个元素是否都通过测试
array.every(function(currentValue,inedx , arr){})
// 判断每一个元素是否都通过测试,有一个不通过为false
// 返回值是true或false
var arr = [1, 2, 5, 3, 15, 20];
// 返回的是一个值,用个变量flag接收
var flag=arr.every(function(value,index,arr){
return value>=20;
})
console.log(flag);//false
Array.find()用于找到第一个符合条件的元素
Array.find(function(currentValue,inedx , arr){})
/*
用于找到第一个符合条件的元素
没有找到就返回undefined
没有需要的参数,可以不写或只写一个
*/
var arr = [1, 2, 5, 3, 15, 20];
var flag=arr.find(function(value,index,arr){
return value>=15;
})
console.log(flag); //15
Array.findindex()找到第一个符合条件的元素的索引
array.findindex(function(currentValue,inedx , arr){})
/*
用于找到第一个符合条件的元素的索引 , 没有找到就返回-1
没有需要的参数,可以不写或只写一个
*/
var arr = [1, 2, 5, 3, 15, 20];
var flag=arr.findIndex(function(item){
return item>15;
})
console.log(flag);// 5
判断是否包含指定的值
Array.includes("查询的文本","从下标开始")
返回true/false
如果index超过数组的长度,查不到数组
index小于0的时候,可以查到
// 判断某个数组是否包含给定的值,返回boolean
[1,2,3].includes(2);//true
[1,2,3].includes(4);// false
[1,2,3].includes(1,100);// false
[1,2,3].includes(1.-1);// true
通过includes()简化if判断
if(a==0 || a==null || a==undefined || a==false || a==1){}
// 简化 后续想添加在数组里添加就行
if([0,null,undefined,false,1].includes(a)){}
展开语法
...arr 将数组或对象拆分成以逗号分隔的参数序列
var arr=[1,2,3];
...arr;//1,2,3
console.log(...arr);//1 2 3 当成了console.log的参数分隔符,所以输出1 2 3
合并数组
arr.concat(数组)(普通方法)
var arr = [1, 2, 5, 3, 15, 20];
var b=["11"];
console.log(arr.concat(b));//[1, 2, 5, 3, 15, 20, "11"]
// 返回了一个新的数组
展开语法
方法一
var a=[1,2,3];
var b=[4,5,6];
var c=[...a,...b];//[1,2,3,4,5,6]
方法二
a.push(...b);
var a=[1,2,3];
var b=[4,5,6];
a.push(...b);//1,2,3,4,5,6
数组索引
arr.indexOf()
var a=["aa","bb",3,"bb"];
a.indexOf("bb");//返回索引号1
//从前面开始查找
//只返回第一个满足条件的索引
//如果在数组中找不到元素,就返回-1
arr.lastindexOf()
var a=["aa","bb",3,"bb"];
a.lastindexOf("bb");//返回索引号3
//从后面开始查找
//如果在数组中找不到元素,就返回-1
数组排序
- 翻转数组
reverse()
var a=[1,2,3];
a.reverse();//[3,2,1]
- 数组排序(冒泡排序)
sort()
var a=[4,2,1,6];
a.sort();//1,2,4,6
// 注意:sort只能实现单位数字排序,遇到多位数字排序,根据第一位数字的大小进行排序
// sort()方法的完美解决
var a=[42,21,11,6];
a.sort(function(a,b){
return a-b;// 升序
return b-a;// 降序
})
数组转为字符串
Array.toString()
对象类型的数组不能转变
var fruits = ["Banana", "Orange", "Apple", "Mango"];\
fruits.toString(); // Banana,Orange,Apple,Mango
// 对象类型数组不能改变
var fruits = [{id:1},{id:2}];
var str = fruits.toString();
console.log(str) // [object Object],[object Object]
Array.join(指定分隔符)
用于把数组中的所有元素转换一个字符串
元素是通过指定的分隔符进行分隔的
不传参数,默认,分隔
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.join(); //Banana,Orange,Apple,Mango
fruits.join("-"); //Banana-Orange-Apple-Mango