js数组详解:
一. 數(shù)組的淺復制與深復制:
數(shù)組之間的復制,由于數(shù)組是引用類型,如果是字面量式復制,導致只要是改變其中一個數(shù)組的值兩者都會發(fā)生變化,這種復制叫做淺復制。如果要想復制后不收影響,則需要深復制。深復制就是寫一個函數(shù),通過遍歷把兩者之間的值一一交換。
1.淺復制:
var arr = []; for(var i = 0;i < 10;i++) {arr.push(i+1);//裝了個數(shù)而已 } var array = arr; arr[0] = 400; alert(array[0]);//4002.深復制:
function deepCopy(arr1,arr2) {for(var i = 0;i < arr.length;i++) {arr2[i] = arr1[i];} }var arr = []; for(var i = 0;i < 10;i++) {arr.push(i+1); } var array = []; deepCopy(arr,array); arr[0] = 100; alert(array[0]);二. 數(shù)組的查找
indexOf();lastIndexOf();用來查找數(shù)組中的參數(shù)是否存在,如果存在返回該參數(shù)的索引,不存在就返回-1;
三. 數(shù)組與字符串的轉(zhuǎn)換:
jion()和toString();這兩個方法可將數(shù)組形式轉(zhuǎn)化成字符串,個元素用逗號隔開;
四.已有數(shù)組創(chuàng)建數(shù)組
concat()和splice();方法允許通過已有的數(shù)組創(chuàng)建新數(shù)組。concat()可以合并多個數(shù)組創(chuàng)建一個數(shù)組。splice()截取一個數(shù)組的子集創(chuàng)建一個數(shù)組。splice的一個參數(shù)是截取的其實索引值,第二個是截取的長度。
var arr1 = ["assassin",11,1,23,"Wunworld","intelwisd"]; var arr2 = ["wanghaifu","yangxian","son","daughter"]; var arr3 = arr1.concat(arr2); alert(arr3);var arr = [1,2,3,4,5,6,7,8,9,10]; var array = arr.splice(3,5); alert(array);//4,5,6,7,8數(shù)組的可變函數(shù):
一. 為數(shù)組添加元素:push()和unshift();
push();方法將一個元素添加的數(shù)組的尾部,unshift();將一個元素添加到數(shù)組的頭部。添加元素時同樣可以用length屬性,arr[arr.leng-X] = 元素;這種插入式的添加很耗性能,添加到某一位時后面的都要后移。
二. 從數(shù)組中刪除元素:pop()和shift();
pop();刪除數(shù)組末尾的元素,shift();方法可以刪除數(shù)組的第一個元素。
三. 從數(shù)組的中間位置添加和刪除元素
刪除數(shù)組的第一個元素和在數(shù)組開頭添加一個元素存在同樣的問題————都需要將數(shù)組的元素向前或向后移動,這時就用splice();方法:
1.起始索引
2.需要截取的個數(shù)(添加元素時0)
3.添加進去的數(shù)組元素
splice();用法總結(jié):
1).用于截取數(shù)組構(gòu)成新的數(shù)組
var arr = [1,2,3,4,5,6,7,8,9,10]; var array = arr.splice(3,5); alert(array);//4,5,6,7,82).用于添加元素
splice(x,0,arr);//x:起始位置,arr:添加的數(shù)組3).用于刪除元素
splice(x,y);//x:起始位置,y:個數(shù)1和3,其實是一樣的只是對于不同的數(shù)組而言。
四. 數(shù)組的排序
reverse();該方法將數(shù)組中的元素順序進行翻轉(zhuǎn)
sort();對于sort()方法最好適用于字符的排序,要是進行數(shù)組排序(該方法是按照字典排序),調(diào)用一個比較大小的函數(shù),簡單的相減操作,一個數(shù)組減去另一個數(shù)字,如果為負數(shù)那么被減數(shù)小于減數(shù);。。
?
function de(n1,n2) {return n1-n2; }var arr = [11,3,56,78,990,44,56]; var arr2 = arr.sort(de); alert(arr2);另見排序總結(jié):
五.數(shù)組的迭代方法;
一).不生成新數(shù)組的迭代器方法:
1).forEach();該方法接受一個函數(shù)作為參數(shù),對與數(shù)組中的每一個元素使用該函數(shù)。
2).every();該方法接受一個布爾類型的函數(shù),讀數(shù)組中的每一個元素使用該函數(shù),如果對于所有的元素,該函數(shù)都(整體)返回true;否則false;
function isEven(num) {return num % 2 == 0; } var arr = [2,4,6,8,10]; var even = arr.every(isEven); if(even) {alert("this num is even"); }else{alert("this num is odd"); }//this num is even;反例:
function isEven(num) {return num % 2 == 0; } var arr = [2,3,10]; var even = arr.every(isEven); if(even) {alert("this num is even"); }else{alert("this num is odd"); }//this num is odd;兩個例子說明every();接受的是一個布爾類型的一個函數(shù),對于函數(shù)的整體進行判斷。
3).some();該方法與every()方法相似,同樣接受一個布爾類型的函數(shù),讀取數(shù)組的每一個元素,但只要有一個元素為真,則為真。
function isEven(num) {return num % 2 == 0; } var arr = [2,3,5,7]; var even = arr.some(isEven); if(even) {alert("this num is even"); }else{alert("this num is odd"); }//this num is even;4)1.reduce();該方法接受一個函數(shù),返回一個值,該方法會從一個累加值開始,不斷的累加和數(shù)組中的后續(xù)元素調(diào)用該函數(shù),知道數(shù)組中的最后一個元素。該函數(shù)和add();函數(shù)一起,從左到右,依次對數(shù)組中的元素求和。
function add(num1,num2) {return num1+num2; } var arr = [1,2,3,4,5,6,7,8,9,10]; var nums = arr.reduce(add); alert(nums);//55 //1+2=3+3=6+4=10+5=15+6=21+7=28+8=36+9=45+10=552.reduce();該方法可以吧數(shù)組中的元素連接起來;
function add(num1,num2) {return num1+num2; } var arr = ["Wunworld","assassin","is","man"]; var arr2 = arr.reduce(add); alert(arr2);//Wunworldassassinisman;3.reduceRight();該方法和reduce()方法相似只是從右往左執(zhí)行。
二).生成新數(shù)組的迭代器方法:
//2016/12/22/
map()和filter();
map();與foreach();相似,該方法是對數(shù)組中的每一個元素使用某個函數(shù),map();返回一個新的數(shù)組,是對原有的元素使用某一個函數(shù)的結(jié)果。
filter();與every();相似,傳入一個返回值為布爾類型的函數(shù)。與every()方法不同的是對的數(shù)組中的所有元素執(zhí)行此函數(shù),結(jié)果為true時并不返回true,而是返回一個新的數(shù)組,該數(shù)組包含使用函數(shù)后所對應的元素。
二維數(shù)組:
通過擴展JavaScript數(shù)組對象為其增加了一個新的方法,該方法通過設置傳入新的數(shù)據(jù)設定了數(shù)組的行,列,初始值。
//接受三個參數(shù),行,列,初始的數(shù)據(jù)0,先定義一個空數(shù)組用來存放列元素,遍歷行,再遍歷中聲明一個空的列數(shù)組,再進行遍歷列,空的列數(shù)組進行初始化的賦值。列元素分別賦值給空數(shù)組,外側(cè)返回二維數(shù)組即可。
var num = Array.matrix(5,5,0); alert( num[1][1] );//0 num = [ [1,2,3],[4,5,6],[7,8,9] ]; alert( num[1][2] );層次不齊的函數(shù):JavaScript對層次不起的數(shù)組表現(xiàn)很好,通過計算每一行的長度來實現(xiàn)。
eg:
var grades = [ [89,90],[109,109,76],[98,99,140,120,56],[79,70,45,67,99] ]; var totals = 0; var average = 0.0; for(var row = 0; row < grades.length; row++) {for(var col = 0; col < grades[row].length; col++) {total += grades[row][col];}average = total/grades[row].length;alert( "student"+(row+1)+"average:"+average );total = 0;average = 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/intelwisd/p/7285221.html
總結(jié)
- 上一篇: 通过Scanner从控制台获取数据
- 下一篇: JavaScript 获取 当前日期和三