zoukankan      html  css  js  c++  java
  • 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];   

    仅此杂文,留待后用。
  • 相关阅读:
    【问题解决方案】单个文件夹嵌套时github仓库中最外层文件夹直接显示所有嵌套文件夹名的问题
    【问题解决方案】本地仓库删除远程库后添加到已有github仓库时仓库地址找不到的问题(github仓库SSH地址)
    【问题解决方案】git/github本地和远程仓库的重命名
    【学习总结】《大话数据结构》- 总
    【机器学习】李宏毅机器学习-Keras-Demo-神经网络手写数字识别与调参
    【问题解决方案】Keras手写数字识别-ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接
    【学习总结】win7使用anaconda安装tensorflow+keras
    【问题解决方案】AttributeError: module 'pygal' has no attribute 'Worldmap'
    【问题解决方案】ImportError: No module named 'pygal'
    【问题解决方案】Github中的jupyter notebook文件(.ipynb)加载失败/失败
  • 原文地址:https://www.cnblogs.com/wow1314/p/8406383.html
Copyright © 2011-2022 走看看