1. 数组创建

  1. // 1. 字面量方法
  2. var arr = [];
  3. // 2. 通过内置的Array构造函数声明数组 不推荐这种写法
  4. var arr = new Array();
  5. // 3. new 可以不写
  6. var arr = Array();
  7. // 所有数组都继承 Array.prototype

1. 数组是另一种形式的对象

  1. var arr = [1, 2, 3, 4, 5];
  2. // 0 1 2 3 4
  3. // index: 数组元素对的下标(索引值)
  4. var obj = {
  5. 0: 1,
  6. 1: 2,
  7. 2: 3,
  8. 3: 4,
  9. 4: 5
  10. }
  11. console.log(arr[2]);
  12. console.log(obj[2]);

2. 稀松数组

  1. // 数组中最后边的,不会添加empty
  2. var arr = [,,];
  3. console.log(arr); // [empty x 2]
  4. console.log(arr[0]); // undefined

3. 构造函数创建数组

  1. // 1. 不填参数
  2. var arr = new Array();
  3. console.log(arr); // []
  4. // 2. 1位参数
  5. var arr = new Array(5);
  6. console.log(arr); // [empty x 5]
  7. // 3. 2位参数及以上
  8. var arr = new Array(5, 10);
  9. console.log(arr); // [5, 10]
  10. // 4. 开头中间不允许使用, 添加empty
  11. var arr = new Array(, 10); // ✖
  12. var arr = new Array(10,,1); // ✖
  13. var arr = new Array(1, 2,); // 可以

2.数组的方法

1. push/unshift

  1. // 返回值 执行后数组的长度
  2. // push
  3. var arr = [1, 2, 3];
  4. arr.push(5);
  5. console.log(arr); // [1, 3, 4, 5]
  6. arr.push('a','b');
  7. console.log(arr); // [1, 3, 4, 5, a, b];
  8. // unshift
  9. var arr = [1, 3, 4];
  10. arr.unshift('a');
  11. console.log(arr);// ['a', 1, 3, 4]
  1. // 手动实现push
  2. Array.prototype.myPush = function(){
  3. for(var i = 0; i < arguments.length; i++){
  4. var item = arguments[i];
  5. this[this.length] = item;
  6. }
  7. return this.length;
  8. }

2. pop/unshift

  1. // 返回被删除的元素
  2. // pop删除数组的最后一位
  3. var arr = [1, 2, 3];
  4. arr.pop(); // 返回删除的元素
  5. console.log(arr); // [1, 2]
  6. // unshift 删除数组的第一位
  7. var arr = [1, 2, 3];
  8. arr.unshift();
  9. console.log(arr); // [2, 3]

3. reverse

  1. // 返回翻转后的数组
  2. var arr = [1, 2, 3];
  3. arr.reverse();
  4. console.log(arr); // [3, 2, 1]

4. splice

  1. //array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
  2. var arr = [1, 3, 4];
  3. // 1. 一个参数,代表起始项,删除到末尾
  4. arr.splice(2);
  5. // 2. start deleteCount
  6. arr.splice(0, 2);
  7. console.log(arr);
  8. // 3.start, deleteCount, items添加项
  9. arr.splice(0, 1, 'l', 'o', 'v', 'e');
  10. console.log(arr);
  11. var arr = [1, 3, 4, 5, 6, 7, 8];
  12. // 负数从末尾开始数
  13. arr.splice(-4, 3,'a');
  14. console.log(arr);
  15. // 返回值: 由被删除的元素组成的一个数组,如果只删除了一个元素,则返回只包含一个元素的数组.如果没有删除元素,则返回空数组
  16. var arr = [1, 3, 4, 5, 6, 7, 8];
  17. var deleteArr = arr.splice(-4, 3,'a');
  18. console.log(arr);// [1, 3, 4, 'a', 8]
  19. console.log(deleteArr);// [5, 6, 7]

5. sort

  1. // 默认按照Ascii码表进行排列
  2. var arr = [-1, -5 , 8, 0, 2];
  3. arr.sort();
  4. console.log(arr); // [-1, -5, 0, 2, 8]
  5. var arr1 = ['b', 'z', 'h', 'i', 'a'];
  6. arr1.sort();
  7. console.log(arr1); // ['a', 'b', 'h', 'i', 'z']
  8. var arr2 = [27, 49, 5, 7];
  9. arr2.sort();
  10. console.log(arr2);// [27, 49, 5, 7] 比较首位的Ascii码
  11. // 自定义排序:
  12. // 1. 接收俩个参数
  13. // 2. 返回值: 1.负值 => a在前
  14. // 2.正值 => b在前
  15. // 3. 0 => 保持不变
  16. // sort(function(a, b){
  17. //
  18. //})
  19. var arr2 = [27, 49, 5, 7];
  20. arr2.sort(function(a, b){
  21. // if(a > b){
  22. // return 1;
  23. // }else{
  24. // return -1;
  25. // }
  26. return a - b;
  27. });
  28. console.log(arr2);
  29. // 随机排序
  30. var arr = [1, 2, 3, 4, 5, 6];
  31. var arr = [1, 2, 3, 4, 5, 6];
  32. arr.sort(function(){
  33. // Math.random() 返回一个0-1之间的数;
  34. return Math.random() - 0.5;
  35. })
  36. console.log(arr);
  37. // 按年龄排序
  38. var arr = [
  39. {
  40. name: 'Jenny',
  41. age: 18
  42. },
  43. {
  44. name: 'Jone',
  45. age: 10
  46. },
  47. {
  48. name: 'Ben',
  49. age: 16
  50. },
  51. {
  52. name: 'Crytal',
  53. age: 3
  54. },
  55. {
  56. name: 'Lucy',
  57. age: 11
  58. }
  59. ];
  60. arr.sort(function(a, b){
  61. return a.age - b.age;
  62. })

以上所有的方法都会修改原数组

3. 作业

  1. // 1. 用splice方法重写数组原型上的unshift方法myUnshift
  2. Array.prototype.myUnshift = function(){
  3. for(var i = 0; i < arguments.length; i++){
  4. this.splice(i, 0, arguments[i]);
  5. }
  6. return this.length;
  7. }
  8. var arr = [1, 2, 3, 4, 5];
  9. arr.myUnshift('l', 'o');
  10. console.log(arr); // ['l', 'o', 1, 2, 3, 4, 5]
  1. // 2. 请按照字节数排序下列数组
  2. // ['我爱你', 'OK', 'Hello', '你说WHAT', '可以']
  3. function getBytes(str){
  4. var bytes = str.length;
  5. for(var i = 0; i < str.length; i++){
  6. if(str.charCodeAt(i) > 255){
  7. bytes++;
  8. }
  9. }
  10. return bytes;
  11. }
  12. var arr = ['我爱你', 'OK', 'Hello', '你说WHAT', '可以'];
  13. arr.sort(function(a, b){
  14. return getBytes(a) - getBytes(b);
  15. })
  16. console.log(arr); // ['OK', '可以', 'Hello', '我爱你', '你说WHAT']