zoukankan      html  css  js  c++  java
  • javascript中数组Array的方法

    一、常用方法(push,pop,unshift,shift,join)
    push pop栈方法,后进先出
    var a =[1,2,3];
    console.log(a.push(40)); //4 返回数组的长度
    console.log(a); //[1, 2, 3, 40]
     
    var b =[1,2,3];
    console.log(b.pop()); //3 返回最后一项
    console.log(b); // [1, 2]
    ------------------------------------------------------------------------------------------------------------------
    unshift shift 对列方法,先进先出
    var a =[1,2,3];
    console.log(a.unshift(40));//4 返回数组长度
    console.log(a); // [40, 1, 2, 3]
    var b =[1,2,3];
    console.log(b.shift()); //1 返回取出的第一项
    console.log(b); //  [2, 3]
    ------------------------------------------------------------------------------------------------------------------
    join方法,将数组合并成字符串
    var aN=[1,2,3,4,5];
    console.log(aN.join(''));//12345
    console.log(aN.join('|'));//1|2|3|4|5

    二、排序方法(sort,reverse)
    reverse 反转方法,即将反转数组顺序
    var arr = [1,2,3,4,5];
    console.log(arr.reverse()); //[5, 4, 3, 2, 1]
    ------------------------------------------------------------------------------------------------------------------
    sort方法,默认按数组升序进行排列,选把数组中所有项应用toString()方法,然后比较得到的字符串,从字符串首位开始比较
    var arr =[1,14,3,25,5];
    console.log(arr.sort()); // [1, 14, 25, 3, 5]
    按字符首字母升序排列结果是:[1, 14, 25, 3, 5],因为1最小,所以1,14最前
    对于sort方法有一个比较函数,可以扩展其功能
    function compare(a,b){
        if(a<b){
            return -1;
        }else if(a>b){
            return 1;
        }else{
            return 0;
        }
    }
    用上面的比较函数对数字进行排序,可以得到我们想要的结果
    console.log(arr.sort(compare)); //  [1, 3, 5, 14, 25];
    当然这个方法还能简化;
    console.log(arr.sort(function(a,b){return a-b}));
    sort方法还有其它应用,例如对数组中项目进行随机排序,扩展方法如下:
    console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [3, 1, 14, 5, 25]
    console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [5, 1, 3, 14, 25]
    console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [1, 5, 3, 25, 14]
    console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [5, 25, 14, 1, 3]
    console.log(arr.sort(function(a, b){return Math.random()>.5 ? -1 : 1}));// [25, 5, 14, 3, 1]
    执行了五次,得到的结果均不相同

    三、concat方法
    concat方法用于创建一个新数组
    如果想要复制一个数组,用什么方法,举例如下;
    var arr =[1,2,3,4,5];
    var newArr = arr;
    console.log(newArr);//[1, 2, 3, 4, 5]
    newArr.push(6);
    console.log(newArr);//[1, 2, 3, 4, 5, 6]
    console.log(arr); //[1, 2, 3, 4, 5, 6]
    可见newArr并不是一个新数组,修改newArr会改变数组,因为数组不是基本数组类型,而是引用类型,所以用=赋值只不过是创建了一个新的引用,修改newArr时会修改堆内存的数据。
    那么如何得到一个新的和原来一样的数组呢?
    var newArr1 = arr.concat();
    console.log(newArr1);//[1, 2, 3, 4, 5]
    newArr1.push(6);
    console.log(newArr1);//[1, 2, 3, 4, 5, 6]
    console.log(arr); //[1, 2, 3, 4, 5]
    可见修改新数组不会对原数组产生影响。
    concat方法除了复制数组外,主要用于数组的连接,使用concat方法后会返回一个新的数组
    var aNumber = [1,2,3];
    var aNumber2 = [4,5];
    console.log(aNumber.concat(aNumber2)); //[1, 2, 3, 4, 5]
    console.log(aNumber); //[1,2,3]
    当然concat方法还支持字符串与数组的连接
    console.log(aNumber.concat(7,8)); // [1, 2, 3, 7, 8]
    console.log(aNumber.concat(7,[11,12])); //[1, 2, 3, 7, 11, 12]

    四、slice方法
    slice基于当前数组创建一个删除某些项的新数组
    var aN =[1,2,3,4,5];
    var aN1 = aN.slice(0,2);//截取第0项到第1项
    console.log(aN); //[1, 2, 3, 4, 5] 原数组不变
    console.log(aN1); // [1, 2]
    console.log(aN.slice(1,3));//[2,3] 截取第1项到第2项
    即截取起始位置到结束位置之间的项,包括起始位置,但不包括结束位置
    如果只有一个参数,则截取该参数到当前数组末尾所有项
    console.log(aN.slice(1));//[2, 3, 4, 5]
    如果slice中的参数有负数,则用该负数加上数组的长度来确定起始位置或结束位置
    console.log(aN.slice(-2,-1));// [4] 相当于console.log(aN.slice(3,4));

    五、splice方法
    splice方法可用于对原数组的插入、删除、修改,并不会创建一个新数组
    var aN =[1,2,3,4,5];
    aN.splice(1,2,'b'); //三个参数分别是起始位置,要删除的项数,需要添加的元素
    console.log(aN);// [1, "b", 4, 5] 起始位置删除两项得到[1,4,5],然后将元素b插入起始位置
    由于splice的强大功能可以实现删除,插入,修改功能
    aN.splice(0,1);//删除第1项
    aN.splice(1,1);//删除第2项
    aN.splice(0,0,'a')//在第0项前插入'a'
    aN.splice(2,0,'a')//在第2项前插入'a'
    aN.splice(0,1,'b') //将第0项替换成'b'
    aN.splice(2,1,'b') //将第2项替换成'b'

    六、位置方法(indexOf,lastIndexOf)
    indexOf是得到数组元素在数组中的位置,lastIndefOf是从数组末尾向开头找
    var aN = [3,4,2,6,5,9];
    console.log(aN.indexOf(2)); //2
    console.log(aN.indexOf(6)); //3
    console.log(aN.lastIndexOf(2));//2
    console.log(aN.lastIndexOf(6));//3

    indexOf和lastIndexOf都可以接收两个参数,第一个表示要查找的项,第二个表示查找的起来位置
    var aN2 = [1,2,5,4,6,2,4,5,8,2];
    console.log(aN2.indexOf(2,3));//5 从第4项开始算起,所以取的是第二个2,位置为5
    console.log(aN2.lastIndexOf(2,5));//5 从第6项即第二个2开始从尾往前找,所以找到是第6项那个2,它的位置是5
    console.log(aN2.lastIndexOf(2,4));//1 从第5项即6这个数字从尾往前找,所以找到是第2项那个2,它的位置是1

    七、迭代方法(every,filter,forEach,map,some)
    every:对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true.
    var aN=[1,2,3,4,5]
    var bFlag = aN.every(function(item){
        return item<6
    })
    console.log(bFlag);//true

    var bFlag2 = aN.every(function(item){
        return item<4
    })
    console.log(bFlag);//false
    ------------------------------------------------------------------------------------------------------------------
    some:对数组中的每一项运行给定函数,如果该函数对任一项都返回true,则返回true.
    var aN=[1,2,3,4,5]
    var bFlag = aN.some(function(item){
        return item==5
    })
    console.log(bFlag);//true
    var aN=[1,2,3,4,5]
    var bFlag = aN.some(function(item){
        return item==6
    })
    console.log(bFlag);//false
    ------------------------------------------------------------------------------------------------------------------
    filter:对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
    var aN=[1,2,3,4,5]
    var aNewArr = aN.filter(function(item){
        return item>2
    })
    console.log(aNewArr);// [3, 4, 5]
    ------------------------------------------------------------------------------------------------------------------
    forEach:对数组中的每一项运行给定函数,这个方法无返回值
    var aN=[1,2,3,4,5]
    aN.forEach(function(item){
        console.log(++item);
    })
    输出:
    2
    3
    4
    5
    6
    ------------------------------------------------------------------------------------------------------------------
    map:对数组中的每一项运行给定函数,返回数组调用的结果组成的数组
    var aN = [1,2,3,4,5]
    var aNewArr = aN.map(function(item){
        return ++item
    })
    console.log(aNewArr);//[2, 3, 4, 5, 6]

    八、缩小方法(reduce,reduceRight)
    reduce()方法从数组第一项开始,逐渐遍历到最后一项,reduceRight()方法从数组最后一项开始,逐渐遍历到第一项
    var aN = [1,2,3,4,5]
    var sum = aN.reduce(function(prev,cru,index,array){
      console.log(prev,cru);
      return prev+cru
    })
    console.log(sum);
    输出
    1 2
    3 3
    6 4
    10 5
    15
    ------------------------------------------------------------------------------------------------------------------
    var aN = [1,2,3,4,5]
    var sum = aN.reduceRight(function(prev,cru,index,array){
      console.log(prev,cru);
      return prev+cru
    })
    console.log(sum);
    输出
    5 4
    9 3
    12 2
    14 1
    15
    ------------------------------------------------------------------------------------------------------------------
    除了求和也可以进行其它运算,例如求数组中所有项的乘积
    var aN = [1,2,3,4,5]
    var sum = aN.reduce(function(prev,cru,index,array){ 
      return prev*cru
    })
    console.log(sum);//120

    javascript中数组的功能相当强大,无论是sort方法还是迭代方法(every,some,filter,forEach,map)或者缩小方法(reduce,reduceRight)都可以进行扩展,让代码执行效率更快,书写简单。

  • 相关阅读:
    4月19日 疯狂猜成语-----第五次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜
    prototype
    angularJs scope的简单模拟
    angularjs DI简单模拟
    洗牌算法
    深入探索 TCP TIME-WAIT
    Logitech k480 蓝牙键盘连接 ubuntu 系统
    在 centos6 上安装 LAMP
    vlc 播放器的点播和广播服务
    Linux 文件系统及 ext2 文件系统
  • 原文地址:https://www.cnblogs.com/lj915/p/3890028.html
Copyright © 2011-2022 走看看