一、数组基础
1.1、数组的基础知识
// 数组基础var arr = [1, 2, 3, 4, 5];console.log(arr.length);arr.push(6);console.log(arr);
1.2、声明数组和声明对象的三种形式
1.3、声明数组的三种形式
所有数组的都继承与Array.prototype
// 声明数组和声明对象的三种形式var arr1 = [1, 2, 3, 4, 5]; // 数组字面量声明方式var arr2 = new Array(11, 22, 33); // 通过系统内置构造函数Array方式声明数组 不推荐var arr3 = Array(111, 222, 333); // 不使用console.log(arr1, arr2, arr3);// 所有数组的都继承与Array.prototypeconsole.log(arr1.__proto__);console.log(arr2.__proto__);console.log(arr3.__proto__);
1.4、数组是特殊的对象
- index数数组的下标「索引值」它是从0开始,逐级递增的
obj.name => JS引擎内部会隐式转换为 obj[‘name’]
// 数组是特殊的对象var arr = [1, 2, 3, 4, 5];// 0 1 2 3 4// index数数组的下标「索引值」它是从0开始,逐级递增的var obj = {0: 1,1: 2,2: 3,3: 4,4: 5}console.log(arr[2]);console.log(obj[2]);var person = {name: '张三',age: 19}// obj.name => JS引擎内部会隐式转换为 obj['name']
1.5、稀松数组
系统内置的构造函数Array不能声明稀松数组 ```javascript
// 稀松数组// 数组不一定每一位都有值// 系统内置的构造函数Array不能声明稀松数组var arr1 = [1, 2, 3, , , , 5, 7,]; //稀松数组,最后一个逗号可以不写// var arr2 = new Array(, 1, 3, 5); // 报错,系统内置的构造函数Array不能声明稀松数组var arr3 = new Array(5); // [, , , , , ,] 这里的数字代表的是数组长度console.log(arr1);// console.log(arr2);console.log(arr3);
<a name="YhUWJ"></a>## 1.6、数组的增改查```javascript// 数组的增改查var arr = [1, 2, 3, 4, 5];console.log(arr[5]);// 增arr[5] = 6;console.log(arr);// 改arr[0] = 100;console.log(arr);// 查console.log(arr[3]);// 写成对象的形式var obj = {0: 1,1: 2,2: 3,3: 4,4: 5}console.log(obj[5]);
二、数组常用的方法一「这些方法都会改变原有数组」
2.1、增:push/unshift
2.1.1、push方法
- 向数组末尾追加内容
返回值:执行系统内置的构造函数Array.prototype上的push方法后,返回的数组长度
// 数组常用的方法一「这些方法都会修改原来的数组」// push/unshift// 继承与系统构造函数Array.prototype上的方法// push: 向数组末尾增加内容// 返回值:执行系统内置构造函数上的push方法后,返回的数组长度console.log(Array.prototype);var arr = [1, 2, 3, 4, 5];arr.push(6, 7, 8);console.log(arr);
2.1.2、unshift方法
向数组开始追加内容
返回值:执行系统内置构造函数Array.prototype上的unshift方法后,返回的数组长度
// unshift: 向数组开始追加内容// 返回值: 执行系统内置构造函数Array.prototype上的unshift方法后,返回的数组长度var arr = [33, 44, 55, 66];arr.unshift(11, 22);console.log(arr);
2.1.3、重写push方法
// 重写push方法Array.prototype.myPush = function(arr){for(var i = 0; i < arguments.length; i++){this[this.length] = arguments[i];}return this.length;}var arr = [1, 2, 3, 4, 5];arr.myPush(6, 7, 8);console.log(arr);
2.2、删:pop/shift「不需要参数」
2.2.1、pop方法
删除数组最后一项
- 参数:注意不需要参数
返回值:执行系统构造函数Array.prototype上的pop方法后,返回数组被删除的那一项的值
// pop/shift// pop: 删除数组最后一项,不需要参数// 返回值:执行Array.prototype上的pop方法后,返回数组被删除的那一项var arr = [1, 2, 3, 4, 5];arr.pop();console.log(arr);
2.2.2、shift方法
删除数组第一项
- 参数:注意不需要参数
返回值:执行Array.prototype上的shift方法后,返回数组被删除的那一项的值
// shift: 删除数组的第一项// 参数: 不需要参数// 返回值: 执行Array.prototype上的shift方法后,返回数组被删除的那一项的值var arr = [1, 2, 3, 4, 5];arr.shift();console.log(arr);
2.3、splice方法
2.3.1、splice方法实现增、删
arr.splice(开始项的索引,剪切的长度,剪切后最后一位开始添加数据)
- splice支持负数索引
splice方法可以实现数组的增、删
// splice(开始向的索引,剪切的长度,剪切后最后一位开始添加数据)// splice支持负数索引// splice实现删除var arr1 = ['a', 'b', 'c', 'd', 'e', 'g'];arr1.splice(1, 2); // 从下标1开始,剪切两项console.log(arr1);// splice实现新增var arr2 = ['a', 'b', 'c', 'd', 'e', 'g'];arr2.splice(5, 0 , 'f');console.log(arr2);// splice支持负数索引var arr3 = ['a', 'b', 'c', 'd', 'e', 'g'];arr3.splice(-1, 0, 'f');console.log(arr3);
2.3.2、重写splice方法
// 重写splice方法Array.prototype.mySplice = function(arr, index){if(index >= 0){index += 0;}else{index += this.length;}return index;}// 三目运算符版Array.prototype.mySplice = function(arr, index){return index += index >= 0 ? 0 : this.length;}var arr = ['a', 'b', 'c', 'd', 'e', 'g'];console.log(arr.mySplice(arr, 3));console.log(arr.mySplice(arr, -2));
2.4、数组排序:reverse/sort
2.4.1、reverse方法
实现数组倒序
- 参数:不需要参数
返回值:执行Array.prototype上的reverse方法后,返回重新排序后的数组
// 数组排序:reverse/sort// reverse: 实现数组倒序// 参数:不需要参数// 返回值:执行Array.prototype上的reverse方法后,返回排序后的数组var arr = [4, 3, 2, 1];arr.reverse();console.log(arr);
2.4. 2、sort方法「重点」
sort方法是按照ASCII码表来实现数组排序的
- 返回值:执行Array.prototype上的sort方法,返回排序后的数组
- 负值:a排在前面
- 正值:b排在前面
- 0:保持不变
如果sort方法不传递参数,那就只能实现简单的排序
// sort:实现数组排序// 参数:可以不要参数,也可以传递一个返回苏// 返回值:负值:a排在前面;// 正值:b排在前面// 0:保持不变// 不传递参数:只能实现简单的排序var arr1 = [-1, 6, 4, 7, 9, 8, -5];arr1.sort();console.log(arr1);var arr2 = ['b', 'z', 'h', 'i', 'a'];arr2.sort();console.log(arr2)
sort方法传递一个函数可以实现万能的排序
// 传递一个函数参数,可以实现万能排序var arr3 = [27, 49, 5, 7];// arr3.sort();// console.log(arr3);arr3.sort(function(a, b){if(a > b){return 1;}else{return -1;}});// 简写// arr3.sort(function(a, b){// return a - b;// });console.log(arr3);
2.4.3、实例排序
// 排序实例// 按照年龄从小到大排序var arr = [{son: 'Jenny',age: 18},{son: 'Jone',age: 10},{son: 'Ben',age: 16},{son: 'Crytal',age: 3},{son: 'Lucy',age: 11}];arr.sort(function(a, b){if(a.age > b.age){return 1;}else{return -1;}});console.log(arr);
// 排序实例二// 按照字符串长度排序var arr = ['12345', '1', '1234', '12', '1234567'];arr.sort(function(a, b){if(a.length > b.length){return 1;}else{return -1;}});console.log(arr);
三、作业
用mySplice方法实现myUnshift方法
- 请按照字节数实现下列数组的排序 [‘我爱你’, ‘OK’, ‘Hello’, ‘你说WHAT’, ‘可以’]
