1. 数组创建
// 1. 字面量方法var arr = [];// 2. 通过内置的Array构造函数声明数组 不推荐这种写法var arr = new Array();// 3. new 可以不写var arr = Array();// 所有数组都继承 Array.prototype
1. 数组是另一种形式的对象
var arr = [1, 2, 3, 4, 5]; // 0 1 2 3 4 // index: 数组元素对的下标(索引值) var obj = { 0: 1, 1: 2, 2: 3, 3: 4, 4: 5 } console.log(arr[2]); console.log(obj[2]);
2. 稀松数组
// 数组中最后边的,不会添加emptyvar arr = [,,];console.log(arr); // [empty x 2]console.log(arr[0]); // undefined
3. 构造函数创建数组
// 1. 不填参数var arr = new Array();console.log(arr); // []// 2. 1位参数var arr = new Array(5);console.log(arr); // [empty x 5]// 3. 2位参数及以上var arr = new Array(5, 10);console.log(arr); // [5, 10]// 4. 开头中间不允许使用, 添加emptyvar arr = new Array(, 10); // ✖var arr = new Array(10,,1); // ✖var arr = new Array(1, 2,); // 可以
2.数组的方法
1. push/unshift
// 返回值 执行后数组的长度// push var arr = [1, 2, 3];arr.push(5); console.log(arr); // [1, 3, 4, 5]arr.push('a','b');console.log(arr); // [1, 3, 4, 5, a, b];// unshiftvar arr = [1, 3, 4];arr.unshift('a');console.log(arr);// ['a', 1, 3, 4]
// 手动实现push Array.prototype.myPush = function(){ for(var i = 0; i < arguments.length; i++){ var item = arguments[i]; this[this.length] = item; } return this.length; }
2. pop/unshift
// 返回被删除的元素// pop删除数组的最后一位var arr = [1, 2, 3];arr.pop(); // 返回删除的元素console.log(arr); // [1, 2]// unshift 删除数组的第一位var arr = [1, 2, 3];arr.unshift();console.log(arr); // [2, 3]
3. reverse
// 返回翻转后的数组var arr = [1, 2, 3];arr.reverse();console.log(arr); // [3, 2, 1]
4. splice
//array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) var arr = [1, 3, 4]; // 1. 一个参数,代表起始项,删除到末尾 arr.splice(2); // 2. start deleteCount arr.splice(0, 2); console.log(arr); // 3.start, deleteCount, items添加项 arr.splice(0, 1, 'l', 'o', 'v', 'e'); console.log(arr); var arr = [1, 3, 4, 5, 6, 7, 8]; // 负数从末尾开始数 arr.splice(-4, 3,'a'); console.log(arr);// 返回值: 由被删除的元素组成的一个数组,如果只删除了一个元素,则返回只包含一个元素的数组.如果没有删除元素,则返回空数组var arr = [1, 3, 4, 5, 6, 7, 8];var deleteArr = arr.splice(-4, 3,'a');console.log(arr);// [1, 3, 4, 'a', 8]console.log(deleteArr);// [5, 6, 7]
5. sort
// 默认按照Ascii码表进行排列 var arr = [-1, -5 , 8, 0, 2]; arr.sort(); console.log(arr); // [-1, -5, 0, 2, 8] var arr1 = ['b', 'z', 'h', 'i', 'a']; arr1.sort(); console.log(arr1); // ['a', 'b', 'h', 'i', 'z'] var arr2 = [27, 49, 5, 7]; arr2.sort(); console.log(arr2);// [27, 49, 5, 7] 比较首位的Ascii码// 自定义排序:// 1. 接收俩个参数// 2. 返回值: 1.负值 => a在前// 2.正值 => b在前// 3. 0 => 保持不变// sort(function(a, b){// //})var arr2 = [27, 49, 5, 7];arr2.sort(function(a, b){ // if(a > b){ // return 1; // }else{ // return -1; // } return a - b;});console.log(arr2);// 随机排序var arr = [1, 2, 3, 4, 5, 6];var arr = [1, 2, 3, 4, 5, 6];arr.sort(function(){ // Math.random() 返回一个0-1之间的数; return Math.random() - 0.5;})console.log(arr);// 按年龄排序var arr = [ { name: 'Jenny', age: 18 }, { name: 'Jone', age: 10 }, { name: 'Ben', age: 16 }, { name: 'Crytal', age: 3 }, { name: 'Lucy', age: 11 }];arr.sort(function(a, b){ return a.age - b.age;})
以上所有的方法都会修改原数组
3. 作业
// 1. 用splice方法重写数组原型上的unshift方法myUnshiftArray.prototype.myUnshift = function(){ for(var i = 0; i < arguments.length; i++){ this.splice(i, 0, arguments[i]); } return this.length;}var arr = [1, 2, 3, 4, 5];arr.myUnshift('l', 'o');console.log(arr); // ['l', 'o', 1, 2, 3, 4, 5]
// 2. 请按照字节数排序下列数组 // ['我爱你', 'OK', 'Hello', '你说WHAT', '可以']function getBytes(str){ var bytes = str.length; for(var i = 0; i < str.length; i++){ if(str.charCodeAt(i) > 255){ bytes++; } } return bytes;}var arr = ['我爱你', 'OK', 'Hello', '你说WHAT', '可以'];arr.sort(function(a, b){ return getBytes(a) - getBytes(b);})console.log(arr); // ['OK', '可以', 'Hello', '我爱你', '你说WHAT']