• 第五章 引用类型> Array类型


     

    Array中的每一项可以保存不同类型的值。访问数组的值通过下标访问。数组的第一个值的下标是0;第二个是1,以此类推

    创建数组的2种基本方式:

    1.Array构造函数

    var color = new Array();
    
    //也可以省略new操作符
    var color = Array();

    2.数组字面量

    var color = ["red", "yellow", "blue"];
    //创建一个包含三个值的数组
    
    var color2 = [];
    //创建一个空数组

    访问,和设置数组值的方法:

    var color = ["red", "blue", "yellow"];
    
    console.log(color[1]);
    console.log(color.length);
    
    //blue 数组的下标值从0开始
    //2 数组的length属性因为下标从0开始 所以比属性名的数量-1

    length属性

    通过显式的设置数组的length属性,可以 设置和删除属性

    var color = ["red", "blue", "yellow", "leo"];
    color.length = 2;
    console.log(color[3]);
    //undefined
    
    color.length = 4; //设置数组长度为4
    color[3] = "two"; //数组的下标从0开始
    console.log(color[3]); 
    //two 

    利用length属性在数组末尾添加新项,数组的最后一项始终是length-1;下一项的位置就是length;每加一项就自动更length属性值。

    var colors =["red", "blue", "green"];
    colors[colors.length] = "black";
    colors[colors.length] = "brown";
    console.log(colors[4]);
    //brown
    

    检测数组:Array.isArray()用于确定某个值是不是数组。

    数组的转换方法:

    数组继承的toLocaleString()、toString()、valueOf()以逗号分隔的字符串形式返回数组的每一项。

    join():接受一个参数,即用作分隔的字符串。

    var colors =["red", "blue", "green"];
    console.log(colors.join("||"));
    
    // red||blue||green

    数组的 栈方法:

    栈:后进先出(Last-in-fisrt-out)的数据结构,新添加的项最早被移除,栈的插入(推入)和移除(弹出)只发生在栈的底部。

    push():可以接受任意的参数,把他们逐个添加到数组的末尾。并返回修改后数组的长度。

    pop():从数组末尾移除最后一项,减少数组的length值,返回被移除的项。

    var colors = ["blue", "yellow", "red"];
    colors.push("abc","123"); //推入2个数组项
    console.log(colors);
    // ["blue", "yellow", "red", "abc", "123"]
    
    
    var item = colors.pop(); //删除最后一项,把删除的一项保存在item
    console.log(colors); 
    console.log(item); //被删除的123
    
    //["blue", "yellow", "red", "abc"]
    //123

    数组的 队列方法:

    队列数据结构的访问规则FIFO(First-in-first-out,先进先出);

    shift(): 移出数组中的第一项,并返回该项,数组长度减一。

    unshift(): 在数组第一个值之前添加任意个项,并返回心数组的长度;

    var colors = ["blue", "yellow", "red"];
    colors.unshift("abc","123"); //在数字最前添加俩个值
    console.log(colors); 
    //["abc", "123", "blue", "yellow", "red"]
    
    var item = colors.shift(); //删除最前面的一个值,并保存在item
    console.log(colors);
    console.log(item);
    
    // ["123", "blue", "yellow", "red"]
    // abc

    数组的重排序方法:

    reverse():用来反转数组的数组;

    var a = [1, 2, 3, 4, 5];
    a.reverse();
    //[5, 4, 3, 2, 1]

    sort(): 比较的是字符串的位置。

    sort()接受一个比较函数,比较函数接受俩个参数,如果第一个参数一个位于第二个参数之前返回一一个负数,相等返回0,第一个参数位于第二个之后返回一个正数。

    function compare(value1, value2) {
    if(value1 < value2) { //小于返回-1
    return -1; 
    }else if(value1 > value2) { // 大于则返回 1
    return 1;
    }else {
    return 0; //等于返回0 数组的升序排列。降序排列反之即可 即第一个参数小于第二参数返回1,大于返回-1
    }
    }
    var values = [0 ,21, 22, 34, 2, 10];
    values.sort(compare);
    console.log(values);
    
    // [0, 2, 10, 21, 22, 34]

    数组的操作方法:

    concat()

    concat():先创建当前数组的一个副本,接受一个参数,然后将接收到的参数添加到数组末尾。没有参数的时候,只简单的创建副本和返回。

    var colors = ["blue", "yellow", "pen"];
    var colors2 = colors.concat("red","mood", ["one", "two"]);
    console.log(colors);
    console.log(colors2);
    ["blue", "yellow", "pen"]
    ["blue", "yellow", "pen", "red", "mood", "one", "two"]
    //对于心数组color2,变成有open的那组。
    //color1继续不变。

    slice()

    slice():一或多个参数,返回项的起始和结束为止。不包括结束位置的项。一个参数时返回起始位置到数组末尾。

    var colors = ["blue", "yellow", "pen"];
    var colors2 = colors.concat("red","mood", ["one", "two"]);
    console.log(colors2);
    console.log(colors2.slice(1,4));
    console.log(colors2.slice(2));
    console.log(colors2.slice(-2));
    // ["blue", "yellow", "pen", "red", "mood", "one", "two"]
    // ["yellow", "pen", "red"]
    // ["pen", "red", "mood", "one", "two"]
    // ["one", "two"] //-1是数组的最后一项, -2代表倒数第二我,依次类推

    splice()

    3.splice():向数组的中部插入项,始终返回一个数组。数组中包含从原始数组中被删除的元素。三种使用方式:

    (1)删除: 删除任意数量的项。指定2个参数,要删除的起始位置,和删除的项数。

    (2)插入:向指定位置插入任意数量的项。提供三个参数:起始位置,要删除的项数,要插入的项。

    (3)替换:向指定位置插入任意数量的项。插入和删除的项可以不同。三个参数,起始位置,要删除的项数,要插入的项。

    var colors = ["blue", "yellow", "pen"];
    var colors2 = colors.concat("red","mood", ["one", "two"]);
    colors3 = colors2.splice(-2, 2); //从倒数第二项开始,删除2个元素
    colors2.splice(2, 3, "ten", "nine"); //从第三个元素开始,删除3个,替换成ten,nine
    console.log(colors3);
    console.log(colors2)
    // ["one", "two"]
    // ["blue", "yellow", "ten", "nine"]

    数组的位置方法:

    indexOf(): 接受俩个参数,要查找的项,和(可选的参数)表示查找起点位置的索引。从头开始,返回要查找的项在数组中的索引。未找到返回-1;查找按照严格相等。

    indexlastOf():和indexOf()一样,从数组末尾开始向前查找。

    var number = [1, 2, 3, 4, 5, 7, 8, 9, 10];
    
     console.log(number.indexOf(2));
     console.log(number.lastIndexOf(8));
     console.log(number.lastIndexOf(7));
     // 1
     // 6
     // 5

    数组的迭代方法:

    概述: 一,大多数方法的第一个参数接受一个函数(即回调函数),对数组的每个元素调用一次该函数。如果是稀疏数组,对不存在的元素不调用该函数。
    回调函数有三个参数: function(数组元素,元素索引,数组本身);

     

    forEach()

    forEach(function(){ },[thisObject])
    第二个参数是可选的。如果有,(改变this的指向。)

    forEach(): 遍历,循环数组,为每个元素调用指定的函数。

    var data = [1, 2, 3, 4, 5];
    var num = 0;
    data.forEach(function(value) {
    num +=value;
    });
    console.log(num);
    //15

    forEach(): 回调函数使用三个参数: function(数组元素,元素索引,数组本身);
     

    var data = [1, 2, 3, 4, 5];
     data.forEach(function(v, i, a) {
     3a[i] = v + 1;
     });
     console.log(data);
     // [2, 3, 4, 5, 6]

    forEach无法在所有元素都传递给调用函数之前终止遍历。如果要提前终止fofEach方法放再一个try块中,并抛出一个异常。

     function foreach(a, f, t) {
     try{a.forEach(f, t);}
     catch(e) {
    if(e === foreach.break) return;
           else throw e;
          }
     }
     foreach.break = new Error("StopIteration");

    map()

    map(): (映射的意思) 将数组的每个元素传递给指定的回调函数,并返回一个数组。 回调函数的参数和forEach一样

     var a = [1, 2, 3];
     b = a.map(function(x) {
     return x;
     });
     //map类似于forEach 这里回调函数的参数x就是数组元素。
     console.log(b);
     [1, 2, 3]


    必须要有返回值。

    var data = [1, 2, 3];
    console.log(data.map(function(value, index, array){}));
    
    //[undefined, undefined, undefined]

    filter()

    filter(): (过滤,筛选的意思) 指数组filter后,返回过滤后的新数组;

    回调函数用来逻辑判定,该函数返回true,或false;

    var a = [1, 2, 3, 4, 5];
    smallvalues = a.filter(function(x) {
    return x < 3;
    });
    console.log(smallvalues);
    // [1, 2

    every()和some()

    every()和some() : 数组元素应用回调函数进行逻辑判断,返回true,或fasle;回调函数用于设置判断条件;

    every():数组中的所有元素被回调函数判定返回true,才返回true;

    var a = [1, 2, 3, 4, 5];
    console.log(a.every(function(x){
    return x < 10;
    }));
    // true


    some() : 数组元素只要有一个元素返回true就返回true;所有元素都返回false,才返回false;

    var a = [1, 2, 3, 4];
    console.log(a.some(isNaN));
    // false

    一旦every()和some() 确认返回false或者true就会停止遍历数组元素。
    在空数组上调用every()返回true,some返回false;

    reduce() 和reduceRight()

    reduce(): 有俩个参数,第一个是执行化简的函数(用某种方法把俩个值组合成一个值),并返回。
    第二个(可选),传递给函数的初始值。
    如果没有指定第二参数,将使用数组的第一个元素作为初始值。

    化简函数的参数:
    function(化简操作累计的结果,数组元素,元素的索引,数组本身)

    var a = [1, 2, 3, 4, 5];
    var sum = a.reduce(function(x,y){
    return x+y;
    },0);
    console.log(sum);
    // 15

    reduceRight():从数组的右边向前,执行化简函数。

    var a = [1, 2, 3];
    var sum = a.reduce(function(x,y){
    return x + y;
    },0);
    console.log(sum);
    //类似于2 *3 *1 6
  • 相关阅读:
    3d角色模型 制作 全过程 。3d max 。3d role model making process.3d Max
    Cocos2d-X开发教程-捕鱼达人 Cocos2-x development tutorial
    unity3d 给游戏添加音源 Unity3d adds a sound source to the game
    安卓 运行、调试 配置 android Run/debug configurations
    Gradle 同步 已经开始 Gradle sync started
    更新 是 可用的 针对 安卓 软件开发包和工具 Updates are available for android software development packages and tools
    [Educational Codeforces Round 16]A. King Moves
    他们在军训,我在搞 OI(一)
    [POJ1383]Labyrinth
    [POJ1157]LITTLE SHOP OF FLOWERS
  • 原文地址:https://www.cnblogs.com/zhangbaihua/p/5561231.html
Copyright © 2020-2023  润新知