引用类型之Array

作者: baiying | 来源:发表于2017-07-28 21:09 被阅读12次

    创建

    • Array构造函数
    let colors = new Array();
    let colors = new Array(20);
    let colors = new Array('red','blue');
    

    构造函数创建数组时也可以省略new关键字

    • 字面量
    let colors =['red','blue'];
    let colors = [];
    

    与对象一样,在使用字面量创建数组时,不会调用 Array构造函数

    检测数组

    • instanceof: colors instanceof Array;
    • Array.isArray():Array.isArray(colors);
      对于一个网页 或者一个全局作用域而言,使用insanceof就可以得到想要的结果,一旦存在两个以上不同的全局环境,它不能得到我们想要的结果,因而就出现了Array.isArray()

    转换方法

    • valueof():返回数组自身
    • toString():返回由数组中每个值的字符串形式拼接而成的以逗号分隔的字符串
    • toLocaleString():通常也返回数组字符串形式组成的以逗号分隔的字符串
    • join():可以选择使用不同的分隔符来分隔字符串
    let colors = ['red','blue'];
    let ts = colors.toString();
    let tls = colors.toLocaleString();
    let v = colors.valueOf();
    let j = colors.join(';');
    
    console.log(ts);
    console.log(tls);
    console.log(v);
    console.log(j);
    //结果
    "red,blue"
    "red,blue"
    ["red", "blue"]
    "red;blue"
    

    栈&队列方法

    • pop():从数组末尾移除一项并返回这一项
    • push():从数组末尾添加一项并返回新数组的长度
    • shift():移除数组中的第一项并返回这一项
    • unshift():在数组前端添加项并返回新的数组长度

    重排序方法

    • reverse():反转数组项的顺序
    • sort():按照升序排列数组项
    let num1= [1,5,3,7,0];
    let num2 = [12,21,5,4,0];
    
    console.log(num1.sort());
    console.log(num1.reverse());
    console.log(num2.sort());
    console.log(num2.reverse());
    //结果
    [0, 1, 3, 5, 7]
    [7, 5, 3, 1, 0]
    [0, 12, 21, 4, 5]
    [5, 4, 21, 12, 0]
    

    在某些情况下这两个方法能满足我们的需求,但有些情况却不可以,因为这两个方法在排序时将数组项都转换成字符串再进行排序,所以对于有些数值不能正确排序
    为了解决这个问题,可以sort()方法接收一个比较函数作为参数,以便我们指定哪个值应该排在前边

    //比较函数
    function compare(value1,value2){
      if(value1 < value2){
        return -1;
      }
      else if(value1>value2){
        return 1;
      }
      else{
        return 0;
      }
    }
    
    //当数组项都是数值时,可将比较函数简化为compare1
    function compare1(value1,value2){
    return value1-value2;
    }
    
    let num = [1,23,0,5,7];
    let colors = ['red','blue','pink'];
    
    console.log(num.sort(compare));
    console.log(colors.sort(compare));
    //结果
    [0, 1, 5, 7, 23]
    ["blue", "pink", "red"]
    

    实现逆序只需要在比较函数中调换两个参数即可

    操作方法

    • concat():基于当前数组项创建一个新数组,并且将参数中项追加到新数组之后
    • splice():
      • splice(start,count):删除从start位置起始的count项
      • splice(start,count,value):删除从start位置起始的count项并且插入后边的参数

    位置方法

    • indexOf():返回指定项在数组中的位置,从前往后找,可指定起始位置
    • lastIndexOf():返回指定项在数组中的位置,从后往前找,可指定起始位置

    迭代方法

    • every():对数组中的每一项运行指定函数,若每一项该函数都返回true,则最终返回true
    • filter():对数组中的每一项运行指定函数,返回该函数返回true的项组成的数组
    • forEach():对数组中的每一项运行指定函数,无返回值
    • map():对数组中的每一项运行指定函数,返回每次函数调用的结果组成的数组
    • some():对数组中的每一项运行指定函数,只要有返回true的项则最终返回true,否则返回false
    let nums = [1,3,4,6,5];
    
    let evenum = nums.every(function(item,index,array){
      return (item>0);
    });
    
    let filnum = nums.filter(function(item,index,array){
      return (item > 3);
    });
    
    let mapnum = nums.map(function(item,index,array){
      return item+1;
    });
    
    let somenum = nums.some(function(item,index,array){
      return item >5;
    });
    
    nums.forEach(function(item,index,array){
      item = item+1;
    });
    
    console.log(evenum);
    console.log(filnum);
    console.log(mapnum);
    console.log(somenum);
    //结果
    true
    [4, 6, 5]
    [2, 4, 5, 7, 6]
    true
    

    归并方法

    • reduce():从前到后迭代数组中的每一项,构建一个最终的返回值
    • reduceRight():从后往前迭代数组中的每一项,构建一个最终的返回值
    let nums = [1,3,4,6,5];
    
    let sum = nums.reduce(function(pre,cur,index,array){
      return pre+cur;
    });
    
    let sumright = nums.reduce(function(pre,cur,index,array){
      return pre+cur;
    });
    
    console.log(sum); //19
    console.log(sumright);//19
    

    相关文章

      网友评论

        本文标题:引用类型之Array

        本文链接:https://www.haomeiwen.com/subject/yyyxlxtx.html