ECMAScript 数组
Array类型 ECMAScript最常用的类型。而且ECMAScript中的Array类型和其他语言中的数组有着很大的区别。虽然数组都是有序排列,但ECMAScript中的数组每个元素可以保存任何类型。ECMAScript中数组的大小也是可以调整的。创建Array类型有两种方式:第一种是new运算符,第二种是字面量
1.使用new关键字创建数组
let box = new Array(); console.log(typeof(box)); //object 数组属于Object类型 box.push('张三'); box.push(55); box.push([7,9]); console.log(box); //['张三', 55, [7,9]
2.以上三种方法,可以省略new关键字
var box = Array(); alert(typeof box);//object
3.使用字面量方式创建数组
let box = []; //字面量的方式创建数组 console.log(typeof box); //object box = ['西西', 18, '北京'];//字面量的方式创建数组,并且分配了元素 console.log(box); //['西西', 18, '北京']
4.获取数组元素个数length
let box = ['西西', 18, '北京'];//字面量的方式创建数组,并且分配了元素 console.log(box.length); //3
5.转换方法
对象或数组都具有toLocaleString()、toString()和valueOf()方法。其中toString()和valueOf()无论重写了谁,都会返回相同的值。数组会讲每个值进行字符串形式的拼接,以逗号隔开。
let box = ['西西',18,'北京',new Date()]; console.log(box); //['西西', 18, '北京', Sun Jun 25 2023 15:06:10 GMT+0800 (中国标准时间)] console.log(box.valueOf());//['西西', 18, '北京', Sun Jun 25 2023 15:06:10 GMT+0800 (中国标准时间)] console.log(box.toString());//西西,18,北京,Sun Jun 25 2023 15:06:10 GMT+0800 (中国标准时间) console.log(box.toLocaleString());//西西,18,北京,2023/6/25 15:06:10 console.log(box.join("|"));//西西|18|北京|Sun Jun 25 2023 15:13:04 GMT+0800 (中国标准时间)
6.栈方法(后进先出)
ECMAScript数组提供了一种让数组的行为类似于其他数据结构的方法。也就是说,可以让数组像栈一样,可以限制插入和删除项的数据结构。栈是一种数据结构(后进先出),也就是说最新添加的元素最早被移除。而栈中元素的插入(或叫推入)和移除(或叫弹出),只发生在一个位置——栈的顶部。ECMAScript为数组专门提供了push()和pop()方法。
push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度。而pop()方法则从数组末尾移除最后一个元素,减少数组的length值,然后返回移除的元素。
let box = ['西西',18,'北京',new Date()]; let count = box.push('PHP', '望京'); console.log(count);//6 console.log(box);//['西西', 18, '北京', Sun Jun 25 2023 15:20:10 GMT+0800 (中国标准时间), 'PHP', '望京'] let item = box.pop(); console.log(item); //望京 console.log(box); //['西西', 18, '北京', Sun Jun 25 2023 15:21:37 GMT+0800 (中国标准时间), 'PHP']
7.队列方法(先进先出)
列队在数组的末端添加元素,从数组的前端移除元素。通过push()向数组末端添加一个元素,然后通过shift()方法从数组前端移除一个元素
let box = ['东东', 20, '北京']; let count = box.push('PHP', '望京'); //5 let item = box.shift(); //移除数组开头的一个元素,并且返回这个元素:东东 console.log(item); //东东 console.log(box); //[20, '北京', 'PHP', '望京'] //数组提供了一个unshift()方法,它和shift()方法的功能完全相反。unshift()方法为数组的前端添加一个元素。 count = box.unshift('南南'); //5 给数组前端添加一个元素,并且返回最新的长度。最新长度:5 console.log(box);//['南南', 20, '北京', 'PHP', '望京']
8.排序
数组中存在两个可以直接用来排序的方法:reverse()和sort()。
reverse 从大到小排序,sort 从小到大排序
let box = [2,5,3,4,1]; box.sort(); //从小到大排序 console.log(box); //[1, 2, 3, 4, 5] box.reverse(); //从大到小排序 console.log(box); //[5, 4, 3, 2, 1]
sort方法的默认排序在数字排序上有些问题,因为数字排序和数字字符串排序的算法是一样的。我们必须修改这一特征,修改的方式,就是给sort(参数)方法传递一个函数参数。
function compare(value1, value2) { //数字排序的函数参数 if (value1 < value2) { //小于,返回负数 return -1; } else if (value1 > value2) { //大于,返回正数 return 1; } else { //其他,返回0 return 0; } } let box = [0, 1, 5, 10, 15]; box.sort(); console.log(box); //[0, 1, 10, 15, 5] box.sort(compare); console.log(box); //[0, 1, 5, 10, 15] box.reverse(); console.log(box); //[15, 10, 5, 1, 0]
9.concat 方法
concat()方法可以基于当前数组创建一个新数组
let box = ['江苏', '南京', '玄武']; let box2 = box.concat(['玄武湖', '中山陵']); //创建新数组,并添加新元素 console.log(box); //['江苏', '南京', '玄武'] 当前数组没有任何变化 console.log(box2); //['江苏', '南京', '玄武', '玄武湖', '中山陵']
10.slice 方法 可以用于数组和字符串表示切片
//slice(begin, end); 会从begin开始 到end结束所有元素,包含begin 不包含end //begin 从该索引开始提取原数组元素,如果该参数为负数则表示从原数组中的倒数第几个元素开始提取 let box = ['红', '黄', '蓝', '绿', '黑', '紫']; let box1 = box.slice(1,3);//'黄', '蓝' 从下标1,到下标3(不包含), 下标从0开始 let box2 = box.slice(-4, -2);//'蓝', '绿' 元素倒数第4个元素 到倒数第二个(不包含)之间的内容 let box3 = box.slice(-2);//'黑', '紫' 元素倒数第二个开始 到结尾
11.splice 方法 只能用于数组
//当 splice 方法的参数只有 1 个的时候(i),表示删除数组中索引为 i及 i之后的所有元素。返回删除的元素,数组原地修改 //i 为非负整数:删除数组中索引为 i及i之后的所有元素 //i 为负整数: 索引从后往前计算,最后一位索引是 -1,倒数第二位索引是 -2,依次类推。删除i及i之后的所有元素 let box = [1,2,3,4,5,6]; let box2 = box.splice(2); console.log(box);//[1, 2] console.log(box2);//[3, 4, 5, 6] //当 splice 方法参数有2个的时候(i,j) //表示从数组中索引i 开始删除,一共删除j个 let box2 = box.splice(3, 6); console.log(box);//[1, 2, 3] console.log(box2);//[4, 5, 6] //当参数为3或者3个以上的情况 //语法a.splice(i,j,e1,e2,...) //当 splice 方法有 3 个参数时,表示从索引为 i位置开始删除j个元素,然后从i位置添加e1,e2,...,返回删除的元素,原地修改 //若 j 为0,则表示一个元素也不删除,则元素从i前一个位置开始插入 //若 j >0,则表示从i位置开始(包括i位置)删除j个元素,然后从i 后面开始插入 let box2 = box.splice(2, 2, 'a'); //从索引2开始删除2个元素,然后在索引2插入 a console.log(box);//[1, 2, 'a',5,6] console.log(box2);//[3, 4] let box2 = box.splice(1, 0 , 'a', 'b', 'c'); //从索引1开始删除0个元素,在索引1位置插入a,b,c console.log(box); //[1,'a','b','c',2,3,4,5,6] console.log(box2);//[] let box2 = box.splice(-3, 0, 'm', 'n'); //从结尾开始第三个元素,删除0个元素,插入m,n console.log(box); //[1,2,3,'m','n',4,5,6] console.log(box2);//[] let box2 = box.splice(-3, 2, 'x', 'y');//从结尾第三个元素开始,删除2个元素,插入x,y console.log(box); //[1,2,3,'x','y',6] console.log(box2);//[4,5] let box2 = box.splice(0,0,'p','q'); //数组开头插入p,q两个元素 console.log(box); //['p','q',1,2,3,4,5,6] console.log(box2);//[] let box2 = box.splice(box.length,0,'e','f'); //数组结尾插入e,f两个元素 console.log(box); //[1,2,3,4,5,6,'e','f'] console.log(box2);//[]