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