数组是由对象发展而来,对象包含数组;
数组是一种有序的数据集合,数组中各个成员之间使用逗号进行分隔,它们被称为数组元素。
['数组元素1','数组元素2','数组元素3','数组元素4']
1、创建数组
(1)构造函数创建数组
语法格式:var 变量名 = new Array(元素 0,元素 1,...,元素 n);
var array = new Array(1,2,3,4);
(2)数组直接量创建数组
语法格式:var 变量名 = [元素 0,元素 1,...,元素 n];
var array = [1,2,3,4]
2、数组元素
(1)元素的获取
语法格式:数组[索引];(数组的索引是从零开始的,直到数组的长度减一结束)。
var array = [1,2,3,4];
console.log(array[0]);//打印结果:1
(2)元素的添加、修改和删除
使用索引进行简单的添加和修改。
var array = [];
array[0] = "添加元素";
console.log(array[0]);//打印结果:添加元素
array[0] = "修改元素";
console.log(array[0]);//打印结果:修改元素
push() 和 unshift() 方法。push() 方法是向数组的末尾追加一个或多个元素;unshift() 方法是在数组头部插入一个或者多个元素。
var array = [2];
array.push(3);
console.log(array.toString());//打印结果:2,3
array.unshift(1);
console.log(array.toString());//打印结果:1,2,3
与 push() 和 unshift() 方法对应的还有 pop() 和 shift() 方法,pop() 方法用于删除数组中的最后一个元素,shift() 方法用于删除数组中的第一个元素。
var array = [1,2,3];
array.pop();
console.log(array.toString());//打印结果:1,2
array.shift();
console.log(array.toString());//打印结果:2
(3)元素的查询
indexOf() 和 lastIndexOf() 方法,indexOf() 方法用来搜索指定的元素,返回第一个元素的索引,若未搜索到则返回 -1。indexOf() 方法是从头到尾进行搜索,而lastIndexOf() 方法与其唯一的区别就是从尾到头进行搜索。
(4)元素的遍历
for...in 循环遍历。
var array = [1,2,3,4];
for(var item in array){
console.log(array[item]);
}
/*逐条打印结果:
1
2
3
4
*/
for 循环遍历,需要用到数组的 length 属性作为判断。
var array = [1,2,3,4];
for(var i=0;i<array.length;i++){
console.log(array[i]);
}
/*逐条打印结果:
1
2
3
4
*/
3、特殊的数组形式
(1)稀疏数组
稀疏数组的索引会有断层,稀疏数组的特点就是它的 length 属性不能代表有效元素的个数。
(2)多维数组
多维数组就是数组的元素还可以是数组。
var array = [1,[2,3],4];
//获取多维数组的元素
console.log(array[1][0]);//打印结果:2
(3)类数组对象
类数组对象相当于对象使用数组的方式来存储数据。
var obj = { '0': 'a','1': 'b','2': 'c' };
console.log(obj[0]);//打印结果:a
ps:字符串以一种只读的类数组的形式存在,但其并不是真正的数组类型。这一机制也让它有了数组的一些特征。
var str = '好好学习';
console.log(str[0]);//打印结果:好
//charAt() 方法
console.log(str.charAt(2);//打印结果:学
4、数组方法
(1)join() 方法
join() 方法(不改变原数组)的作用是将数组的所有元素转换为字符串,并将每个数组元素进行连接,返回最终生成的字符串。
语法格式:array.join(分隔符);分隔符省略则默认使用逗号。
var array = [1,2,3,4];
console.log(array.join());//打印结果:1,2,3,4
console.log(array.join(#));//打印结果:1#2#3#4
(2)concat() 方法
concat() 方法的作用是连接两个或多个数组,该方法不会修改原数组,而是返回一个新数组。
语法格式:array.concat(arrayX,arrayX,...,arrayX);
参数说明:array 要操作的数组,arrayX 必需,可以为任意多个,可以是数组,也可以是具体的值。
var array = [1,2,3];
var array1 = array.concat(4,[5,[6]]);
console.log(array1.length);//打印结果:6
console.log(array1);//打印结果:[1,2,3,4,5,[6]]
(3)splice() 方法
splice() 方法用于插入、删除或替换数组的元素,然后返回被操作的元素。需要注意的是,该方法是对于调用数组的操作,而不是返回一个新数组。
语法格式:array.splice(index,count,elementX,...);
参数说明:index 必需,整数,规定要操作数组的索引位置,使用负数则会从数组的结尾处规定位置,-1 为倒数第一个元素。count 必需,整数,规定要删除的元素个数。elementX 可选,要插入的新元素,可以有若干个。
var array = [1,2,3,4,5];
var array1 = array.splice(0,2,"新元素");
console.log(array1);//打印结果:[1,2]
console.log(array);//打印结果:['新元素', 3, 4, 5]
(4)slice() 方法
slice() 方法用于对数组的元素截取片段,然后放回被操作的元素。需要注意的是,该方法不会对调用数组进行修改。
语法格式:array.slice(start,end);
参数说明:start 必需,整数,规定要操作数组的索引位置,使用负数会从数组结尾处规定位置,-1 表示倒数第一个元素;end 可选,选取元素的结束位置。省略该参数则默认为数组末尾。使用负数则会从数组结尾处规定位置。
var array = [1,2,3,4,5];
console.log(array.slice(2));//打印结果:[3,4,5]
console.log(array.slice(1,-1));//打印结果:[2,3,4]
(5)forEach() 方法
forEach() 方法(不改变原数组)从头到尾遍历数组,每个元素都会调用指定的回调函数。
语法格式:array.forEach(function(element,index,arrayOne){ ... });
参数说明:function 必需,作为参数的回调函数;element 必需,作为传入实参的数组元素;index 可选,作为传入实参的元素索引;arrayOne 作为传入实参的数组本身。
var array = [1,2,3,4,5];
var sum = new String();
array.forEach(function(element){
sum += element;
});
console.log(sum);//打印结果:12345 如果sum = new Number(); 打印结果为15
array.forEach(function(e,i,a){
a[i] = e + '#';
});
console.log(array);//打印结果:['1#', '2#', '3#', '4#', '5#']
(6)map() 方法
map() 方法(不改变原数组)将调用数组的每个元素传递给指定的回调函数,并返回一个数组,它包含该函数的返回值。
语法格式:array.map(function(element){ return value });
参数说明:function 必需,作为参数的回调函数;element 必需,作为传入实参的数组元素。
var array = [1,2,3,4,5];
var arrayOne = array.map(function(e){
return e * e;
});
console.log(arrayOne);//打印结果:[1, 4, 9, 16, 25]
(7)filter() 方法(不改变原数组)
filter 的英文释义为过滤,该方法用于进行逻辑判断,过滤掉不符合条件的数组元素,返回一个新数组,新数组中包含符合条件的数组元素。
语法格式:array.filter(function(element,index){ });
参数说明:function 必需,作为参数的回调函数;element 必需,作为传入实参的数组元素。index 可选。作为传入实参的元素索引。
var array = [1,2,3,4,5];
var array1 = array.filter(function(e){
return e < 3;
});
console.log(array1);//打印结果:[1, 2]
(8)是否都符合 every() 和 是否都不符合 some() 方法(不改变原数组)
every() 和 some() 方法具有类似效果,用于对调用数组的每个元素进行逻辑判断,返回值是 true 或 false。其中,every() 方法是对每个数组元素进行判断,当每个数组元素都符合逻辑判断时则返回 true,否则返回 false。some() 方法是对每个数组元素进行判断,当所有数组元素都不符合逻辑判断时则返回 false,否则返回 true。
语法格式:array.every(function(element){ ... }); array.some(function(element){ ... });
参数说明:array 要操作的数组;function 必需,作为参数的回调函数;element 必需,作为传入实参的数组元素。
var array = [1,2,3,4,5];
var bool1 = array.every(function(element){
return element > 3;
});
var bool2 = array.some(function(element){
return element > 3;
});
console.log(bool1);//打印结果:false
console.log(bool2);//打印结果:true
(9)sort() 数组排序(改变原数组)
(10)reverse() 反转数组(改变原数组)
(11) indexOf() & lastIndexOf() 索引方法(不改变原数组)
都是返回要查找的项在数组中首次出现的位置,没有返回 -1,indexOf 正序查找,lastIndexOf 逆序查找。