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];
仅此杂文,留待后用。