目录
一,如何理解js中的数组?
js数组可以简单的理解为学生宿舍楼(一层宿舍楼有很多房间,每个房间住的人也不一样),因为js数组用来装各种各样的不同类型的数据。
js的数组不同于C语言的数组,C语言的数组只能存单一的数据类型,js的数组里面可以存任意类型的数据。js数组与python的list列表极其相似。
二,创建js数组对象
首先,数组用中括号[]表示,一堆数据凡是被[]包起来,那么他就是一个数组对象。空数组直接就是一个中括号arr_nothing = []。
var arr = [1,2,3,'str',true,false,3.14,null,undefined,[1,2,3]];
console.log(arr);
// [ 1, 2, 3, 'str', true, false, 3.14, null, undefined, [ 1, 2, 3 ] ]
也可以先定义一个空数组,再利用数组索引给数组添加数据。
var arr1 = [];
arr1[0] = 'javascript';
console.log(arr1);
// [ 'javascript' ]
数组元素的访问使用数组名+[index]的形式,即array[0],array[1],array[2],如果array[0]这个数据仍然是一个数组,那么array[0][0]就可以访问到这个嵌套数组的第一个数据。
数组对象有一个length属性,即数组中元素的个数,array.length。字符串的length属性不可修改,但是数组length属性可以修改,若将数组的length修改为小于当前的数据个数,则造成数据丢失,令array.length = 0,即可清空数组。
var arr1 = [0,1,2,3];
console.log(arr1);
arr1.length = 2;
console.log(arr1);
// [ 0, 1, 2, 3 ]
// [ 0, 1 ]
var arr1 = [0,1,2,3];
console.log(arr1);
arr1.length = 0;
console.log(arr1);
// [ 0, 1, 2, 3 ]
// []
三,数组的遍历
1,使用普通的循环语句for&while&do while
var arr1 = [0,1,2,3];
for (var i = 0; i < arr1.length; i++) {
console.log(arr1[i])
}
// 0
// 1
// 2
// 3
var arr = [1,2,3,'str',true,false,3.14,null,undefined,[1,2,3]];
no = 0;
while(no < arr.length){
console.log(arr[no])
no++
}
2,使用增强版for循环
语法:for (var 索引 in array){}。
var arr1 = [0,1,2,3];
for (var index in arr1) {
console.log(arr1[index]);
}
// 0
// 1
// 2
// 3
四,数组构造函数
1,什么是数组空位?
如var arr1 = [0,,2,3],存在用英文逗号隔开,却没有数据,则称一个数组空位,他仍然是数组的一个索引位置,只不过没有绑定到对象,他的值是undefined,即变量存在但是 无值。
var arr1 = [0,,2,3];
console.log(arr1[1]);
// undefined
2,数组构造函数
是一种创建数组的方式。Array是js中的原生自带的对象构造函数,也就是js解析引擎一经运行就定义了Array类。利用var arr = []的方式定义数组,实际上是语法简写(字面量形式),本质上调用的是原生构造函数。
语法如下:var arr_name = new Array(3)。需要给Array后面的括号里传入参数。同时Array也是一个函数,使用:var arr_name = Array(3)也能创建一个长度为3的数组。像这样创建出来的数组里面都是数组空位,没有数据与数组索引进行绑定,也就是empty×3。
var arr = Array(3);
var arr1 = new Array(3);
arr1[0] = 1;
console.log(arr);
console.log(arr1);
// [ <3 empty items> ]
// [ 1, <2 empty items> ]
不建议使用这种方法来创建数组对象。
五,数组的静态方法和实例方法
我们创建的数组是Array类的实例对象,所以每个数组都有Array原型中的实例方法。另外Array类有一个静态方法:Array.isAarray(arr obj),它用于判断一个对象是否为数组对象,返回true或者false。
console.log(Array.isArray([1,2]));
// true
1,push()&pop()方法
用途:在数组尾巴处添加数据或者删除数据,会在原来数组基础上进行修改。push()方法会在数组尾巴新加上一个数据,并让数组的length属性+1并返回。
var arr = [1,2];
console.log(arr,'and',arr.length);
console.log(arr.push(3),'and',arr);
// [ 1, 2 ] and 2
// 3 and [ 1, 2, 3 ]
pop()方法用来弹出数组最后一个元素,并返回弹出的数据内容。
var arr = [1,2,['nonono']];
console.log(arr.pop());
// [ 'nonono' ]
当对空数组使用pop方法时,由于没有数据可以弹掉,默认返回undefined。
2,shift()&unshift()方法
shift()方法用于删掉数组的第一个元素,也就是索引为0的数据。并返回被删掉的数据内容。利用shift删掉数据的特性,可以利用他来清空数组。
var arr = [1,2,['nonono']];
console.log(arr.shift());
console.log(arr);
// 1
// [ 2, [ 'nonono' ] ]
清空数组:
var arr = [1,2,['nonono'],,];
while(arr.shift()){
//pass
}
console.log(arr);
3,join()方法
数组对象的join方法实现:将数组里面的数据用指定的参数连接起来组成一个字符串。数组空位和undefined会转换为空字符串。这个方法与字符串对象方法的split()方法刚好相反。
arr = [1,2,3,undefined,4,'666',,5];
console.log(arr.join());
console.log(arr.join('#'));
// 1,2,3,,4,666,,5
// 1#2#3##4#666##5
4,concat()方法
用于在一个数组后面拼接一个或多个数组。另外也可以在尾部加上其他类型的元素,参数个数不定。
arr = [1,2,3];
arr_new = arr.concat([4,5]);
arr_new = arr_new.concat('666')
console.log(arr_new);
// [ 1, 2, 3, 4, 5, '666' ]
5,reverse()方法
reverse方法用于将数组里面的元素反着放,并不是大小排序。该方法在原始数组上进行修改。
arr = [1,2,3,[12,13],'666'];
console.log(arr.reverse());
// [ '666', [ 12, 13 ], 3, 2, 1 ]
6,slice()方法
slice()方法用于数组切片,他有两个参数:slice(start,end),取不到end值。
arr = [1,2,3,[12,13],'666'];
console.log(arr.slice(0,3));
// [ 1, 2, 3 ]
7,splice()方法
splice()方法用于:将数组中指定索引的数据删除并替换为其他数据。这个方法会在原来的数组上进行修改。
arr = [1,2,3,[12,13],'666'];
arr.splice(0,3,6,6)
console.log(arr);
// [ 6, 6, [ 12, 13 ], '666' ]
8,sort()方法
该方法将数组中的每一个数据先转换为字符串,再按照字典的形式进行排序。如果是纯数字则会按照有小到大的顺序排序。
arr = [1,2,3,[12,13],'666'];
arr.sort()
console.log(arr);
// [ 1, [ 12, 13 ], 2, 3, '666' ]
9,indexOf()&lastIndexOf()方法
用于获取指定数据的索引和最后一次出现的索引。
arr = [1,2,3,[12,13],'666',1];
console.log(arr.indexOf(2),'and',arr.lastIndexOf(1));
// 1 and 5