JavaScript的进阶之路(五)理解数组2

数组方法

            //定义一个测试数组
            var array1 = [1,2,5,null,"a"]; 
            
            //join()方法是String.split()方法的逆操作,后者是将字符串分割成若干块来创建一个数组。
            console.log(array1.join(","));    //  1,2,5,,a  
            
            //返回逆序的数组,不改变原数组,原理是替换(意思是不是重新排列元素创建新的数组,而是在原先的数组中重新排列元素)
            console.log(array1.reverse());   // ["a",null,5,2,1]
            array1.reverse();
            console.log(array1);         //  [1,2,5,null,"a"] 原数组不变
            
            //将数组的元素排序并返回排序后的数组。改变原数组。
            console.log(array1.sort());  // [1,2,5,"a",null]
            array1.sort(function(a,b){
                return a-b;
            });
            console.log(array1);        //  [1,2,5,"a",null] 原数组为排序后的数组
            //针对数组元素全是字符串 不区分大小写的排序
            var  array2 = ["a","C","dog","case","Dog"];
            console.log(array2.sort());  //["C", "Dog", "a", "case", "dog"] 区分大小写
            array2.sort(function(s,t){ 
                var a = s.toLowerCase();
                var b = t.toLowerCase();
                if(a<b) return -1;
                if(a>b) return 1;
                return 0;
            });
            console.log(array2);// ["a", "C", "case", "Dog", "dog"] 不区分大小写
            
            //concat()创建并返回一个新数组 ,原数组不变
            console.log(array1.concat([4,6],7,[8,[9,10]]));
            console.log(array1);   //不改变原数组 [1,2,5,"a",null]
            
            //截取数组元素,返回截取元素组成的数组。原数组不变
            console.log(array1.slice(1,3));   //[2,5]
            console.log(array1.slice(1,-1));  //[2, 5, "a"]
            console.log(array1);    //[1, 2, 5, "a", null]
            
            //插入 删除 修改数组。返回由删除元素组成的数组。  并改变原数组
            console.log(array1.splice(1,3));  //[2,5,"a"]
            console.log(array1);     //[1,null]
            console.log(array1.splice(0,2,"b","c"));  // 返回删除的 [1,null]
            console.log(array1);  // ["b","c"]
            
            
            console.log(array1.push("d"));   //3 返回的数组的 长度  改变原数组
            console.log(array1.pop());   // d 返回删除的的元素 String  改变原数组
            console.log(array1.unshift("a"));   // 3 返回数组的长度 改变原数组
            console.log(array1.shift());  // a 返回删除的的元素 String  改变原数组
            console.log(array1.toString());
            console.log(array1.toLocaleString());
            
            
            //ECMAScript5数组中的方法
            var data=[1,2,3,4,5];
            var sum=0;
            data.forEach(function(value){sum+=value});
            console.log(sum);  //15
            data.forEach(function(v,i,a){return a[i]=v+1})
            console.log(data);     //[2,3,4,5,6]     
            var data1=data.map(function(x){return x*x});//map()方法将调用数组的每个元素,传递给指定函数,返回一个新数组
            console.log(data1);    //[4,9,16,25,36]
            var data2=data.filter(function(x){return x<4});
            console.log(data2);                  //[2,3]
            var data3=data.filter(function(x){return x%2==0}); //获取偶数元素
            console.log(data3);//[2,4,6]
            var data4=data.filter(function(x,i){return i%2!=0});  //获取下标为单数的的元素 
            console.log(data4);//[3,5]
            var bool1=data.every(function(x) {return x<5});  //所有的值都小于5吗?
            var bool2=data.some(function(x){return x>5});    //有大于5的值吗吗?
            console.log(bool1+" "+bool2);
            var num1 = data.reduce(function(x,y){ return x+y},0);
            var num2 = data.reduce(function(x,y){ return x*y},1);
            var num3 = data.reduce(function(x,y){ return (x>y)?x:y});
            console.log(num1+" "+num2+" "+num3);
            var num4=data.indexOf(2);
            var num5 = data.lastIndexOf(3);
            var num6 = data.indexOf(9);
            console.log(num4);    //indexOf()方法返回的是值得下标 
            console.log(num5);
            console.log(num6);    //不存在返回-1,可以判断数组中是否含有某个元素
            
            //在数组中查找所有x,并返回索引下标
            function findx(a,x){
                var result = [],len=a.length,pos=0;
                while(pos<len){
                    pos= a.indexOf(x,pos);
                    if(pos===-1) break;
                    result.push(pos);
                    pos += 1;
                }
                return result;
            }
            var findxArray = [1,2,3,4,1,5,1];
            console.log(findx(findxArray,1));

数组类型

            console.log(Array.isArray(data));  //ECMAScript5中检测是否为数组的方法
            //自定义检测数组方法,实际上是实现isArray方法
            var isArray = Function.isArray || function(o){
                return (typeof o)==="object" && Object.prototype.toString.call(o) ==="[object Array]";
            }
            console.log(isArray(data));

类数组对象:函数的Arguments对象实际上是一个类数组对象,document.getElementsByTagName()也返回一个类数组对象

作为数组的字符串:字符串也有 str.charAt(0)  str[1];   

 

posted @ 2018-02-05 09:41  魔兽IT  阅读(127)  评论(0编辑  收藏  举报