javascript那些事兒(一)javascript數組用法總結(2),javascript數組
//1、數組排序,預設升序排列,sort()方法會調用數組每一項的toString(),然後比較得到的字串來排序//sort() : 返回排序之後的數組//var arr = [23,1,3,56,42,-1];//arr.sort();//alert(arr); // -1,1,3,23,42,56//即使數組每一項都是數值,sort()方法比較的也是字串//var arr = [0,1,5,10,15];//arr.sort();//alert(arr); //0,1,10,15,5//sort()可以接收一個函數參數,用於對數組項進行比較/*function compare(a,b){if(a < b){return -1;}else if(a > b){return 1;}else{return 0;}}var arr = [0,1,5,10,15];arr.sort(compare);alert(arr); //0,1,5,10,15*///2、反轉數組:reverse(),返回排序之後的數組//var arr = [0,1,5,10,15];//arr.reverse();//alert(arr); //15,10,5,1,0//3、concat()方法: 基於當前數組中所有項建立一個新數組//concat()先建立當前數組的一個副本,然後將接收到的參數添加到數組的末尾,然後返回新的數組。//如果沒有給concat()方法傳參數,則僅僅是複製當前數組並返回副本。//如果給concat()傳遞的是一個或者多個數組,則會將數組每一項都添加到結果數組中,//如果傳遞參數不是數組,則會簡單地添加數組末尾。//var names = ["zhangsan","lisi"];//var names2 = names.concat('wangwu','zhaoliu',['xiaoming','xiangsun']);//alert(names); //zhangsan,lisi//alert(names2); // zhangsan,lisi,wangwu,zhaoliu,xiaoming,xiangsun//4、slice() : 基於當前數組的一項或多項建立新數組,接收一個或者兩個參數,項的起始位置和結束位置。//slice方法不影響原始數組//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];//var names2 = names.slice(1);//var names3 = names.slice(1,4); //包含起始位置元素,不包含結束位置元素//alert(names); //zhangsan,lisi,wangwu,zhaoliu,sunqi//alert(names2); //lisi,wangwu,zhaoliu,sunqi//alert(names3); //lisi,wangwu,zhaoliu//如果slice參數中有負數,則用數組長度加上該數來定位//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];//alert(names.slice(-2,-1)); // slice(-2,-1) = slice(3,4) 返回 ”zhaoliu“//如果結束位置小於起始位置,則返回空數組//alert(names.slice(4,1)); //空數組//5、splice()方法:向數組中插入項,splice()方法始終返回一個數組,該數組包含從原始數組中刪除的項,//如果沒有刪除任何項,則返回空數組。//(1): 刪除數組項,從哪個位置開始刪除,刪除幾項//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];//alert(names.splice(0,2)); //zhangsan,lisi//alert(names); //wangwu,zhaoliu,sunqi//(2): 插入數組項,向指定位置插入任意數量的項。參數: 起始位置、0(要刪除的項數)、要插入的項//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];//var deleted = names.splice(1,0,'aa','bb','cc');//alert(names); //zhangsan,aa,bb,cc,lisi,wangwu,zhaoliu,sunqi//alert(deleted);//返回空數組//(3): 替換,向指定位置插入任意數量的項,且同時刪除任意數量項,參數: 起始位置、要刪除的項數)、要插入的項//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi"];//var deleted = names.splice(1,1,'aa','bb','cc');//alert(names); //zhangsan,aa,bb,cc,wangwu,zhaoliu,sunqi//alert(deleted);//lisi//6、indexOf() \ lastIndexOf() : 返回要尋找項在數組中的位置,沒找到返回-1,使用全等===比較//支援瀏覽器包含IE9+、其他瀏覽器//var names = ["zhangsan","lisi","wangwu","zhaoliu","sunqi","lisi","wangwu","sunqi"];//alert(names.indexOf("lisi")); // 1//alert(names.lastIndexOf("lisi")); // 5//7、數組遍曆:every(),filter(),forEach(),map(),some() 參數:每一項上啟動並執行函數,運行該函數的範圍對象//支援這些遍曆方法的瀏覽器:IE9+及其他瀏覽器//every(): 遍曆數組每一項,如果每一項都返回true,則返回true//some(): 遍曆數組每一項,如果任意一項返回true,則返回true//filter(): 過濾滿足條件的值,返回這些值組成的新數組//map() : 返回一個數組,這個數組的每一項都是在原始數組的對應項上運行傳入函數的結果。//forEach(): 沒有傳回值,與for迴圈一樣/*var numbers = [1,2,3,4,5,4,3,2,1];var everyResult = numbers.every(function(item,index,array){return item > 2;});alert(everyResult); //falsevar someResult = numbers.some(function(item,index,array){return item > 2;});alert(someResult); //truevar filterResult = numbers.filter(function(item,index,array){return item > 2;});alert(filterResult); //3,4,5,4,3var mapResult = numbers.map(function(item,index,array){return item*2;});alert(mapResult);//2,4,6,8,10,8,6,4,2numbers.forEach(function(item,index,array){//TODO});*///8、reduce()\reduceRight(): 遍曆數組所有項,構建一個最終傳回值//reduce(): 從前向後遍曆,reduceRight() :從後項前遍曆//接收四個參數: 前一個值,當前值,項索引,數組對象//函數傳回值作為第一個參數自動傳遞給下一項。//使用reduce()求和var numbers = [1,2,3,4,5,6,7,8,9,10];var sum = numbers.reduce(function(prev,cur,index,array){return prev + cur;});alert(sum); //55