数组的概念
数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。元素允许是数值、boolean、undefined、null、对象或数组(所有类型),索引最大可以是2^31-1。
1.数组的创建
大体两种方式
a.使用数组直接量
b.调用构造函数Array()
var empty=[];
var prims=[1,2,3];
var misc=[1.2,true,2];
var a=new Arrays(12);
2.数组的读写
读:使用[]操作符来访问数组中每一个元素
写:使用=操作符来赋值
数组通过[](方括号)访问数组元素就像访问对象的属性一样,方括号内必须为字符串,而数组访问元素过程中会将数字索引转换成字符串。
let a=[1,2,3,4];
let value=a[0];//value=1
a[0]=3;
value=a["0"];//value=3
**注意:**可以使用负整数或非整数来索引数组,这中情况下,数值转为字符串,字符串作为属性名来用。并返回undefined。
数组中的方法
join()
Array.join()方法将数组中所有元素都转化为字符串并拼接在一起,返回最后生成的字符串,括号内可以指定分隔符进行连接,默认是逗号。
var a = [1, 2, 3, 1];
var b = a.join("");//b为"1231"
a=[1,2,[1,2],3];
b=a.join("");//b为"12123"
reverse()
Array.sort()方法将数组中的元素进行排序并返回排序后的数组。不指定参数时,数组元素按照字母表顺序排序(非字符串转为临时字符串进行比较),包含的undefined元素放在数组尾部 ;为其指定一个参数时,参数必须是一个比较函数。
let a=[4,111,3,22];
a.sort();//a变为[111,22,3,4];
a.sort(function(x,y){
return x-y;
});//a变为[3,4,22,111]
concat()
Array.concat()方法创建并返回创建一个新数组,它的元素包括调用concat()的原始数组的元素和concat()的每一个参数。
let a=[1,2,3];
let b=[4,[5,6]];
a.concat(b);//返回的是【1,2,3,[4,5]],a,b不改变
slice()
Array.slice()方法返回指定数组的一个片段或子数组。第一个参数指片段的起始位置,第二个参数指片段的终止位置(可以只指定一个参数(起始位置))。参数可以是负数,表示从数组最后一个位置开始数。
let a=[1,2,3,4];
a.slice(2);//返回[3,4],a不改变
a.slice(0,2);//返回[1,2]
a.slice(1,-1)//返回[2,3]
splice()
Array.splice()是在数组中插入或删除元素的通用方法。调用过程会修改元素组并会返回删除的数组。spicle()前两个参数指定需要删除的数组片段,第一个参数指的是删除和插入的起始位置,第二个参数指删除元素的个数(可以只指定一个参数(插入和删除的起始位置)),紧随其后的是任意个数的参数指定了需要插入到数组中的元素,其插入位置为splice()的第一个参数。
let a=[1,2,3,4];
a.splice(3)//返回[4],a变为[1,2,3]
a.splice(2,0,1,2)//返回[],a变为[1,2,3,1,2]
push()和pop()
push()在数组尾部添加一个或多个元素,并返回数组的新长度。pop()删除数组的最后一个元素,减少数组的长度并返回删除的值。
var stack=[];
stack.push(1,2);//返回2,stack变为[1,2]
stack.pop();//返回2,stack变为[1]
stack.push([1,2]);//返回2,stack变为[1,[1,2]]
unshift()和shift()
unshift()在数组头部添加一个或多个元素(参数为多个时,一次性插入),并将已经存在的元素移动到更高的索引位置以获得足够的空间,并返回数组的新长度。shift()删除数组的第一个元素并将其返回。
var a=[];
a.unshift(1,2);//返回2,a变为[1,2]
a.shift();//返回1,a变为[2]
toString()和toLocaleString()
toString()将数组每个元素转为字符串并且输出用逗号分隔的字符串列表。toLocaleString()是toString()本地化版本。
**注意:**输出不包括方括号或其它任何形式的包裹数组值的分隔符。
[1,2,3].toString();//生成'1,2,3'
[1,[2,3]].toString();//生成'1,2,3'
forEach()
forEach()方法从头至尾遍历数组,为每一个元素调用指定的函数。传递的函数作为forEach()的唯一参数,该函数有两种形式function(value){}和function(value,index,array){}。
var data=[1,2,3,4];
let sum=0;
data.forEach(function(x){
sum+=x;
});
data.forEach(function(v,i,a){
a[i]=v+1;
});//a变为[2,3,4,5]
map()
map()方法将调用的数组每一个元素传递给指定的函数,并返回一个数组,它包含给函数的返回值。
let a[1,2,3];
let b=a.map(function(v){
return v*v;
});//b变为[1,4,9]
filter()
filter()方法返回的数组元素是调用的数组的一个子集。
let a=[1,2,3,4];
let smallValues=a.filter(function(x){
return x<3;
});//smallValues变为[1,2]
some()和every()
every()和some()方法是数组的逻辑判断:他们对数组元素应用指定的函数进行判定,返回true或false。
**注意:**在空数组上调用时,every()返回true,some()返回false。
let a=[1,2,3]
a.some(function(x){
return x>3
});//返回false
a.every(function(x){
return x<4
});//返回true
reduce()和reduceRight()
reduce()和reduceRight()方法使用指定的函数将数组元素进行组合,生成单值。
let a[1,2,3,4];
let sum=a.reduce(function(x,y){return x+y},0);//sun为10
let b[2,3,4];
let big=a.reduceRight(function(x,y){return Math.pow(y,x)});
//big为2^(3^4)
indexOf()和lastIndexOf()
indexOf()和lastIndexOf()搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1.indexof()从头开始搜索,而lastIndexOf()从尾部开始搜索。
let a=[1,2,3,4];
a.indexOf(6);//返回-1
a.lastIndexOf(4);//返回3