• JavaScript我学之七数组


     本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘。

    数组是“多态数组" ,啥都可以放

    1         //JavaScript中的多态数组
    2         var arr = ["one", 2, true,
    3             function (a, b) { return a + b; },
    4             [1,2,3]
    5         ];

    数组是一个对象,拥有自己的属性与方法

    1        //数组是一个对象
    2         console.info(arr);
    3         console.info(arr.length);

    访问与写入

    访问

    1         //数组元素通过下标访问
    2         console.info(arr[0]); //one
    3         //调用放在数组中的函数
    4         console.info(arr[3](100, 200));//300
    5         //访问放在数组中数组
    6         console.info(arr[arr.length - 1].length);//3
    7         //当读取没有内容的位置时,返回undefined
    8         console.info(arr[100]);//undefined

    写入:

     1         var arr2 = [];
     2         //向空数组赋值,将导致数组中添加一个元素
     3         arr2[0] = "Hello";
     4         //读取新加入的元素
     5         console.info(arr2[0].toUpperCase());
     6         //跳着赋值,将导致数组自动地增长
     7         arr2[3] = 3;
     8         console.info(arr2.length);//4
     9         console.info(arr2);//["Hello", 3: 3]
    10         //中间的值为undefined
    11         console.info(arr2[1]); //undefined

     在尾部追加:

    1         //自动在尾部追加元素
    2         var arr3 = [];
    3         for (var i = 0; i < 5; i++) {
    4             arr3[arr3.length] = i;
    5         }
    6         //数组内容为:[0, 1, 2, 3, 4]
    7         console.info(arr3);

    数组常用方法:

    concat  直接连接两个数组的元素。

    1             var left = [1, 2], right = [3, 4];
    2             console.info(left.concat(right));   //[1,2,3,4]

    join  数组中每个元素通过分隔符相连.

    1         var words = ["锤子", "剪刀", "布"];
    2         var result = words.join('<-->');
    3         //锤子<-->剪刀<-->布
    4         console.info(result);

    数组当堆栈:

                        push 入栈
                         pop   出栈
    1            var m_arr = ['a', 'b', 'c'];
    2            m_arr.push('d');
    3            console.info(m_arr); //["a","b","c","d"]
    4            m_arr.pop();
    5            console.info(m_arr); //["a","b","c"]

    开头操作数组元素:

                        unshift  开头插入

                        shift     删除开头
    1         var arr = ["a", "b", "c"];
    2         arr.unshift("99");
    3         console.info(arr);   //["99", "a", "b", "c"]
    4         var shifted = arr.shift();
    5         console.info(shift); //99
    6         console.info(arr); //["a", "b", "c"] 

    截取

                        使用slice提取子数组
                        按[起始索引值,结束索引值) 来截取:
    1             var bigArr = ["a", "b", "c", "d", "e", "f"];
    2             var subArr = bigArr.slice(1, 4);
    3            console.info(subArr);  //"b","c","d"

    删除元素: 

                          splice  从第n个索引值开始删除m个

    1              var arr = ["a", "b", "c", "d", "e", "f"];
    2             arr.splice(2, 3);   //索引值第2个开始删除3个
    3             console.info(arr); // a, b, f

                           delete  虽删除但下标犹在. 

    1          var arr = ["a", "b", "c", "d", "e", "f"];
    2         delete arr[2];
    3         console.info(arr);  //["a", "b", 3: "d", 4: "e", 5: "f"]
    4         console.info(arr[2]);  //undefined

                         当splice有多于2个参数时,就变成删除后再插入元素

    1             var arr = ["a", "b", "c", "d", "e", "f"];
    2             arr.splice(2, 3,"one","two");   //索引值第2个开始删除3个后再插入 one , two
    3             console.info(arr); // a,b,one,two,f

     数组排序:

      排序与反转:

    1             var data = [];
    2             for (i=0 ;  i<=6; i++) {
    3                 data[data.length] = Math.floor(Math.random() * 100);
    4             }
    5             console.info(data.sort()); //升序
    6             console.info(data.reverse()); //反转

     对象数组也排序:

    • 自定义排序的关键在于设计好排序比较函数。
    • 排序是在原数组上进行的.
     1   //定义一个Person构造函数
     2             function Person(name, age) {
     3                 this.name = name;
     4                 this.age = age;
     5             };
     6             //定义一个函数,用于输出Person集合中的数据
     7             function printPeople(arr) {
     8                 for (var i = 0; i < arr.length; i++) {
     9                     console.info(arr[i].name + "有" + arr[i].age + "岁");
    10                 }
    11             };
    12             //使用forEach方法,以回调方式遍历处理数组中的元素
    13             function printPeople2(arr) {
    14                 //forEach回调函数参数说明:
    15                 //value:代表数组中的单个元素
    16                 //index:代表数组中此元素对应的索引
    17                 //traversedObject:引用被遍历的数组
    18                 arr.forEach(function (value, index, traversedObject) {
    19                     console.info(value.name + "有" + value.age + "岁");
    20                 });
    21             };
    22             //生成测试数据
    23             var people = [];
    24             for (var i = 1; i < 5; i++) {
    25                 var age = Math.floor(Math.random() * 100);
    26                 people[people.length] = new Person('用户' + i, age);
    27             }
    28             console.info("原始数组:");
    29             printPeople(people);
    30             //自定义排序
    31             //比较函数具有两个参数 a 和 b,其返回值如下:
    32             //若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    33             //若 a 等于 b,则返回 0。a,b视为相等
    34             //若 a 大于 b,则返回一个大于 0 的值。b应该排在a的后面
    35             people.sort(function (p1, p2) {
    36                 if (p1.age > p2.age) return 1;
    37                 if (p1.age < p2.age) return -1;
    38                 return 0;
    39             });
    40             console.info("排序后的数组:");
    41             printPeople2(people);
  • 相关阅读:
    poj 1466 Girls and Boys (最大独立集)
    hdu 3667 Transportation (拆边 ,最小费用流)
    poj 3487 The Stable Marriage Problem (稳定婚姻 GaleShapley算法 )
    ZOJ Problem Set 1239 (最小点覆盖 )
    poj 2060 Taxi Cab Scheme (最小路径覆盖)
    poj 2226 Muddy Fields (最小点覆盖)
    hdu 1281 棋盘游戏 (二分图)
    hdu 3666 THE MATRIX PROBLEM (差分约束)
    poj 1325 Machine Schedule (最小点覆盖)
    ORACLE导入导出
  • 原文地址:https://www.cnblogs.com/xiaoguanqiu/p/4715372.html
Copyright © 2020-2023  润新知