JavaScript数组详解

1.概述
数组是值得有序集合,数组中的每个元素叫元素,每个元素的位置叫索引。
注意:js中的数组是弱类型的,也就是说一个数组中可以包含不同类型的元素。
例如:var arr = [1,true,'javascript'];
2.创建数组
(1) 字面量创建
例如:var BAT = ['Alibaba','Tencent','Baidu'];
     var commasArr = [1,,2]; //[1,undefined,2]
     var commasArr2 = [,,]; //[undefined,undefined]、
(2)new Array()创建
例如:var arr = new Array();
     var arr = new Array(100);//undefined*100
     var arr = new Array(true,null,1);//[true,null,1]
     new是可以省略的。。。

注意:js中数组的长度最大为2的23次方减1
new Array(429467295);//正确
new Array(429467296);//错误 Range Error:Invalid array length
3.数组元素读取
(1)通过元素索引读取
注意:数组的索引值从0开始
var arr = [1,2,3];  arr[0] = 1;

增加删除元素的几个方法:
(1)arr[3] = 4;//增加第四个元素
js中素组的长度是不定的,可以直接添加元素
(2)arr[arr.length] = 4;//这种方式可以在末尾添加元素
(3)arr.length -= 1;//删除最后的元素
(4)delete arr[0];//删除第一个元素,数组的长度不改变,删除的元素值为undefined
(5)arr.push(3);//增加元素(末尾)数组长度改变
(6)arr.pop();//删除最后一个元素 数组长度改变
(7)arr.unshift(0);//数组头部添加一个元素
(8)arr.shift();//删除数组最前边的元素 数组长度改变
(2)数组的迭代
(1)for(;i<n;i++){
        arr[i];
    }
(2) for(i in arr){
        arr[i];
    }
    注意:数组的原型链上添加元素时for in方式可以遍历到。
    例如:Array.prototype.x = '1'; for in方式遍历时会遍历到x。以下方法可以避免x的遍历:
    for(i in arr){
        if(arr.hasOwnPropetry(i)){
            arr[i];
        }
    }
4.稀疏数组
不含从0开始的连续索引
例如:(1)var arr = [undefined];
         0 in arr;//true 
         var arr = new Array(1);
         0 in arr;//false
     (2)arr.length = 100;
         99 in arr;//false
     (3)var arr = [,,];
         0 in arr;//false
5.数组方法
(1)join() (数组转字符串)
    var arr = [1,2,3];
    arr.join();//"1,2,3"
    arr.join("_");//"1_2_3"
    小技巧:将str字符串重复n次
    function repeatString(str,n){
        return new Array(n+1).join(str);
    }
(2)reverse() (数组倒序排序 ) 原数组被修改
    var arr = [1,2,3];
    arr.reverse();
    arr = [3,2,1]
(3)sort() (数组正序排序) 原数组被改变
    注意:sort() 根据字母进行排序 不根据数字的大小排序
    var arr = ["a","b","c"];
    arr.sort();//["c","b","a"]
    arr = ["c","b","a"]
    arr = [13,24,51,3];
    arr.sort();//[13,24,3,51]
    小技巧:以下方法可以实现数字正序排列
    arr.sort(function(a,b){
        return a-b;//正序
        return b-a;//倒序
    })
    对象数组根据某一属性排序
    arr = [{age:25},{age:20}]
    arr.sort(function(a,b){
        return a.age-b.age;
    })
(4)concat() (数组合并) 不修改原数组
    var arr = [1,2,3];
    arr.concat(4,5);//[1,2,3,4,5]
    arr = [1,2,3]
    数组合并中有数组时会自动拉伸一层
    arr.concat([10.11],12);//[1,2,3,10,11,13]
    arr.concat([1,[2,3]]);//[1,2,3,1,[2,3]]             
(5)slice() (返回部分数组) 不改变原数组
    注意:截取时左闭右开  负数表示从后往前  -1为最后一个元素的索引
    var arr = [1,2,3,4,5];
     一个参数表示从参数开始到最后
    arr.slice(1);//[2,3,4,5]
    两个参数时截取两个参数值中间的元素
    arr.slice(1,3);//[2,3]
(6)splice() (数组截取) 改变原数组
     var arr = [1,2,3,4,5];
    一个参数表示从该位置截取
    arr.splice(2);//[3,4,5] 
    arr = [1,2]
    两个参数时,第一个表示从该位置截取,第二个参数表示截取的元素个数
    arr.splice(2);//[3,4]
    arr = [1,2,5]
    多元素表示在截取的位置添加的元素
    arr.splice(1,1,'a','b');//[1,"a","b"3,4,5]
(7)forEach() (数组遍历)
    arr.forEach(function(x,index,a){
    })
    x:每个元素的值
    index:每个元素的索引值
    a:数组本身
(8)map() (数组映射) 不改变原数组
    var arr = [1,2,3];
    arr.map(function(x){
        retuen x+10;
    });// [11,12,13]
    arr = [1,2,3]
(9) filter() (数组过滤) 不改变原数组
    var arr = [1,2,3,4,5,6,7,8,9,10];
    arr.fliter(function(x,index){
        return index%3===0||x>8;
    });//[1,4,7,8,9,10]
    x:元素值
    index:索引值
(10)every some (数组判断)
    var arr = [1,2,3];
    arr.every(function(x){
        return x<10;
    });//true
    x:元素值
    arr.some (function(x){
        return x===3;
    });//true   
    x:元素                                
    every:数组所素都满条件
    some:数组任一元素满条件##
(11)redece reduceRight (将数组聚合为某果)
    var arr = [1,2,3];
    arr.redece (function(x,y){
        return x+y;
    },0);//true 
     第二个参数为初始值,如果没有则初始值为arr[0]
     reduce:从左向右进行操作
     reduceRight :从右向左操作
(12)indexOf (查找元素索引值 从左向右) lastIndexOf(查找元素索引值 从右向左)
     indexOf(x,y);
     x:要查找的值
     y:从第几个开始找
     如果值不在数组中返回-1
(13)isArray() 判断是否为数组
     Array.isArray([]);//true
    其他方法:
     [] instanceof Array;//true
     ({}).toString.apply([]) ==="[object.Array]";//true
     [].constructor === Array;//true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值