数组的标准定义:一个存储元素的线性集合,可以通过索引来获取存储位置,索引通常为数字,用来计算元素之间位置的偏移量。
JS中的数组:是一种特殊对象。
创建数组:
let arr=[], let arr=[1,2]
let arr=new Array(), let arr= new Array(1,2) let arr=new Array(10)
字符串生成数组:split()
let str='javascript array split string';
let arrs=str.split(" ");
console.log(arrs);
["javascript", "array", "split", "string"]
数组复制:浅复制和深复制
浅复制:
let nums=[1,2,3,4];
let arr=nums;
nums[0]=5;
console.log(arr[0])
5
深复制:
function copy(A,B){
for(let i=0;i<A.length;i++){
B[i]=A[i]
}
}
let nums=[1,2,3,4];
let arr=[]
copy(nums,arr);
nums[0]=5;
console.log(arr[0]);
1
数组查找元素:indexOf(), lastIndexOf()
nums.indexOf(num)
不存在返回-1,存在返回其相对应得索引位置
数组转字符串
let arr=["A","B","C","D"];
let str=arr.join();
console.log(str)
A,B,C,D
let str2=arr.toString()
console.log(str2)
A,B,C,D
已有创建新数组
连接:contact()
A.contact(B); 返回合并之后的新数组
截取:splice()
A.splice(2,2),从索引为2的元素开始,截取长度为2的新数组
数组新增删除元素
push() unshift() pop() shift()
push() 将一个元素添加到数组末尾
unshift() 将元素添加到数组开头
pop()删除末尾元素
shift() 删除开头元素
从中间添加和删除
let arrs[1,2,3,4,5];
let newArr=[6,7]
arrs.splice(3,0,newArr);
arrs.splice(3,2)
数组排序 reverse() sort()
let nums=[1,2,4,3]
nums.reverse();
console.log(nums)
3,4,2,1
nums.sort();
console.log(nums);
1,2,3,4
注意点:
let arr=[1,3,100,2,200];
arr.sort();
console.log(arr)
1,100,2,200,3
sort()是按照字典顺序对元素进行排序的,因此假定元素都是字符串类型,正确的处理方法通常添加一个比大小函数
function compare(num1,num2){
return num1-num2
}
let arr=[1,3,100,2,200];
arr.sort(compare);
数组的迭代器方法
不生成新数组
forEach() every() some() reduce() reduceRight()
forEach() 可传递一个函数作为参数,对数组中每个元素使用该函数
function square(num){
console.log(num*num)
}
let nums=[1,2,3,4];
nums.forEach(square);
every() 接受一个返回值为boolean类型的函数,对数组中每一个元素使用该函数,如果全部元素均返回true,则为true
function isEven(num){
return num%2==0;
}
let nums=[2,4,6]
let even=num.every(isEven);
some() 和every()一样,区别在于主要有个元素返回为true,则返回结果为true
reduce() 接受函数,返回一个值,通常可和add一起做累加求和,或者做数组元素拼接成字符串
function add(sum,num){
return sum+num;
}
let nums=[1,2,3,4]
let sum=nums.reduce(add);
console.log(sum)
10
function concat(str,item){
return str+item;
}
let strs=['abc','edf','edf'];
let str=strs.reduce(concat);
console.log(str);
abc edf edf
reduceRight()方法是从右向左执行
生成新数组
map() filter()
map()和forEach()类似,区别在于,map()返回一个新的数组。
function add(num){
return num+1;
}
let nums=[1,2,3,4];
let newNums=nums.map(add);
console.log(newNums)
2,3,4,5
["1",'2','3'].map(Number);可以直接转成数字
filter()和every()的用法类似,区别在于返回的不是boolean值而是一个新数组 可用来作为过滤不必要的数组