javascript数组详解
1.数组的一些方法:
1 <script type="text/javascript"> 2 //var arr = [1,2,3,4]; //性能略高 3 var arr = new Array(1,2,3,4,5,6,7,8,15);//性能略低,没什么区别 4 arr.push(9);//添加到尾部 5 arr.pop();//删除尾部,一次删除一个 6 arr.shift();//从头部删除一个 7 arr.unshift();//从头部添加一个 8 //splice 先删除一段,再添加一段元素splice(开始,长度) ,,替换; 9 arr.splice(2, 3); 10 arr.splice(2, 0, 'a','b','c');//删除0个元素,再添加abc 11 12 //alert(arr); 13 //alert(arr.join('-'));//合并数组,变成字符串 14 arr.slice(1,3);//slice(开始, 结束),不包括结束位置,取子数组 15 var arr1 = ['23', '33','1','2','12']; 16 //arr1.sort();//排序,默认情况下,把所有的东西都当作字符串处理 17 arr1.sort(function(num1,num2){ 18 return num1 - num2; //按大小排序 19 /* if(num1 < num2){ 20 return -1; //第一个比第二个小/靠左 21 }else if(num1 > num2){ 22 return 1; //右 23 }else{ 24 return 0; //一样 25 } */ 26 }); 27 //alert(arr1); 28 29 var str = 'abc';//String 30 var str2 = new String('abc');//包装类 31 32 var arr2 = ['张三', '失传','王五','李梅','六位','啊']; 33 arr2.sort(function (str1, str2){ 34 return str1.localeCompare(str2);//按拼音顺序排序 35 }); 36 //alert(arr2); 37 //alert(arr2.reverse()); 38 39 var str3 = 'wxy'; 40 var str4 = 'digua'; 41 //alert(str3+str4); 42 //alert(str3.concat(str4));//链接,数组链接 43 44 var arr4 = [1,2,3,4,5]; 45 //alert(arr4.toString()); 46 //alert(arr4);//跟上面一样 47 arr4.toString = function(){ 48 return 'abc'; 49 } 50 function show (){ 51 alert('a'); 52 } 53 show.toString = function(){ 54 return '就不让你看'; 55 }; 56 //alert(show); 57 var mu = 255; 58 //alert(mu.toString(16)); 59 60 //数组常用方法 61 //1.数组去重 62 //2.数组复制 63 /*数组去重 64 function hasContain(arra, num){ 65 var i=0; 66 67 for(i=0;i<arra.length;i++) 68 { 69 if(arra[i]==num) 70 { 71 return true; 72 } 73 } 74 75 return false; 76 } 77 78 var arra=[1,2,3,4,1,5,6,4,8]; 79 var aResult=[]; 80 var i=0; 81 82 for(i=0;i<arra.length;i++) 83 { 84 if(!hasContain(aResult, arra[i])) 85 { 86 aResult.push(arra[i]); 87 } 88 } 89 90 alert(aResult); 91 */ 92 93 var arrc = [1,2,4,6]; 94 95 //var arrb = arrc.concat(); 96 var arrb = arrc; 97 arrb.push(5); 98 alert(arrc); 99 </script>
迭代方法:
every():对数组中的每一项运行给定函数,每一项返回true,则返回true
some():对数组中的每一项给定运行函数,对任一项返回true,则返回true
filter():对数组中的每一项给定运行函数,返回该函数会返回true的项构成的数组
map():对数组中的每一项给定运行函数,返回每次函数调用的结果组成的数组
forEach():对数组中的每一项给定运行函数,这个方法没有返回值
以上方法都不会修改数组中的包含的值
eg:
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult1 = numbers.every(function(item,index,array){ return (item>2); }); // alert(everyResult1); //false var everyResult2 = numbers.some(function(item,index,array){ return (item>2); }); // alert(everyResult2); //true var everyResult3 = numbers.filter(function(item,index,array){ return (item>2); }); // alert(everyResult3); //3,4,5,4,3 var everyResult4 = numbers.map(function(item,index,array){ return item*2; }); // alert(everyResult4); //2,4,6,8,10,8,6,4,2
归并方法:
reduce():迭代数组的所有项,然后构建一个最终的返回组,reduce()从数组的第一项开始,逐个遍历到最后一项
reduceRight():迭代数组的所有项,然后构建一个最终的返回组,reduceRight()从数组的最后一项开始,逐个遍历到第一项
这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。传递给reduce()和reduceRight()的函数接收4个参数值:前一个值、当前值、项的索引和数值对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。
eg:
var values = [1,2,3,4,5]; var sum = values.reduce(function(prev,cur,index,array){ return prev + cur; }); alert(sum); //15 //第一次执行回调函数,prev是1,cur是2.第二次,prev是3(1加2的结果),cur是3(数组的第三项)。这个过程会持续到把数组中的每一项都访问一遍,最后返回结果。 var values = [1,2,3,4,5]; var sum = values.reduceRight(function(prev,cur,index,array){ return prev + cur; }); alert(sum); //15 //第一次执行回调函数,prev是5,cur是4。最终结果相同