摘要:數組中的元素自動前移,比慢的多。該方法接受一個返回值為布爾類型的函數,對數組中得每個元素使用該函數,如果對于所有的元素,該函數都返回則該方法返回。
數組的維基百科定義是:
在編程語言中,數組數據結構(英語:array data structure),簡稱數組(英語:Array),是一種數據結構,是數據元素(elements)的集合。元素可以通過索引來任意存取,索引通常是數字,用來計算元素之間存儲位置的偏移量。
不幸的是JavaScript沒有像此類數組一樣的數據結構,但提供了一種擁有一些類數組特性的對象,它把數組下標轉變成字符串,用其作為屬性。
使用數組 1.創建數組var numbers = []; //[]操作符聲明了一個空的數組,長度為0。 var numbers = new Array(); //與上等價 var numbers = [1,2,3,4,5]; var numbers = new Array(1,2,3,4,5); //構造函數傳入初始值 var numbers = new Array(5); //只傳入一個參數,用來指定數組的長度 var objects = [1,"Joe",true, null]; //在 JavaScript 里數組中的元素不必是同一種數據類型。
推薦使用 [ ] 操作符創建數組,這種方式效率更高。
JavaScript允許數組包含任意混合類型的值
var obj = ["string", 21, true, null, undefined, ["hzzly", 21], {object: true}, NaN];2.數組長度
var arr = [1, 2, 3, 4, 5]; arr.length //5
JavaScript數組的 length 是沒有上界的
如果你用大于或等于當前 length 的數字作為下標來存儲一個元素,那么 length 值會被增大以容納新元素,不會發生數組越界錯誤。
var arr = []; arr.length //0 arr[1000] = true; arr.length //1001 //但 arr 只包含一個屬性3.由字符串生成數組
split() 方法用于把一個字符串分割成字符串數組。
var str = "hzzly"; var arr = str.split(""); console.log(arr); // ["h", "z", "z", "l", "y"]4.對數組的整體性操作
存取函數 1.indexOf()當把一個數組賦給另外一個數組時,只是為被賦值的數組增加了一個新的引用。當你通過原引用修改了數組的值,另外一個引用也會感知這個變化(淺復制)。而深復制是指將原數組中的每一個元素都復制一份到新數組中。
indexOf() 用來查找進來的參數在目標數組中是否存在。如果目標數組包含該參數,就返回該元素在數組中的索引;如果不包含,就返回-1。如果數組中包含多個相同的元素,indexOf()
函數總是返回第一個與參數相同的元素的索引。lastIndexOf(),該函數返回相同元素中最后一個元素的索引,如果沒找到相同元素,則返回-1。
var arr = ["h", "z", "z", "l", "y"]; arr.indexOf("h"); //0 arr.indexOf("l") //3 arr.indexOf("z") //1 arr.lastIndexOf("z") //22.數組的字符串表示
join() 和 toString() 方法都返回一個包含數組所有元素的字符串,默認各元素之間用逗號分開。當直接對一個數組使用 print()
函數時,系統會自動調用數那個數組的tostring()方法。
var arr = ["h", "z", "z", "l", "y"]; arr.join() //"h,z,z,l,y" arr.toString() //"h,z,z,l,y"3.由已有數組創建新數組
concat() 方法可以合并多個數組創建一個新數,concat() 方法發起者是一個數組,參數是另一個數組。作為參數的數組,其中的所有元素都被連接到調用 concat() 方法的數組后面;
splice() 方法截取一個數組的子集創建一個新數組;splice() 方法從現有數組里截取一個新數組,該方法的第一個參數是截取的起始索引,第二個參數是截取的長度。
var a = ["h","z"]; var b = ["z","l","y"]; var c = a.concat(b) //["h", "z", "z", "l", "y"] var myFish = ["angel", "clown", "mandarin", "surgeon"]; // 移除 0 個元素從下標 2, 插入 "drum" var removed = myFish.splice(2, 0, "drum"); // myFish is ["angel", "clown", "drum", "mandarin", "surgeon"] // removed is [], 沒有元素被移除 // 移除下標為 3 的元素 removed = myFish.splice(3, 1); // myFish is ["angel", "clown", "drum", "surgeon"] // removed is ["mandarin"] // 移除下標為 2 的元素, 然后插入 "trumpet" 到下標 2 removed = myFish.splice(2, 1, "trumpet"); // myFish is ["angel", "clown", "trumpet", "surgeon"] // removed is ["drum"] // 從下標為 0 開始移除兩個元素, 然后插入 "parrot", "anemone" and "blue" removed = myFish.splice(0, 2, "parrot", "anemone", "blue"); // myFish is ["parrot", "anemone", "blue", "trumpet", "surgeon"] // removed is ["angel", "clown"] // removes 2 elements from index 3 removed = myFish.splice(3, Number.MAX_VALUE); // myFish is ["parrot", "anemone", "blue"] // removed is ["trumpet", "surgeon"]可變數組 1.添加元素
push()方法會將一個元素添加到數組末尾,返回數組新長度值,也可以使用數組的length屬性為數組添加元素,但push()方法看起來更直觀。
unshift() 方法可以將元素添加在數組的開頭,也可以通過一次調用,為數組添加多個元素。
splice()方法可以為數組添加元素,需提供如下參數:起始索引(亦即你希望添加元素的地方),需要刪除的元素個數(添加元素時該參數設為0),想要添加數組的元素(栗子可以看上面的)。
var arr=["h"]; arr.push("z"); //2 arr的值為["h","z"] arr.unshift("y") //3 arr的值為["y","h","z"]2.刪除元素
pop() 方法可以刪除數組末尾的元素,返回被刪除的值。
shift() 方法可以刪除數組的第一個元素,返回被刪除的值。數組中的元素自動前移,比pop慢的多。
splice() 方法可以指定要刪除的下標和個數,第一個參數是下標,第一個參數是要刪除元素的個數,返回值為所刪除的元素。
var arr = ["h", "z", "z", "l", "y"]; arr.pop() //返回y arr的值為["h", "z", "z", "l"] arr.shift() //返回h arr的值為["z", "z", "l"] arr.splice(1,2) //返回["z", "l"] arr的值為["z"]3.排序
reverse()方法將數組中元素的以中間位置進行翻轉。
sort() 會對數組按照字典順序進行排序。
使用sort()對數字排序,需要傳入一個大小比較函數: function compare(num1,num2) { return num1 - num2; } var nums = [3,1,2,100,4,200]; nums.sort(compare); //[1, 2, 3, 4, 100, 200]迭代器方法 1.不生成新數組的迭代器方法
forEach() 該方法接受一個函數使用參數,對數組中的每個元素使用該函數。
every() 該方法接受一個返回值為布爾類型的函數,對數組中得每個元素使用該函數,如果對于所有的元素,該函數都返回 true, 則該方法返回 true。
some() 該方法也接受一個返回值為布爾類型的函數,只要有一個元素使得該函數返回true,該方法就返回 true。
reduce() 該方法接受一個函數,返回一個值。該方法會從一個累加值開始,不斷對累加值和數組中的后續元素調用該函數,直到數組中的最后一個元素,最后返回得到的累加值;也可以用來將數組中的元素連接成一個長的字符串。
var arr = [1,2,3,4,5] arr.forEach(function(item,index){ //讓數組中的每一項做一件事情 console.log(item,index) }) var result = arr.every(function(item,index){ //檢測數組中的每一項是否符合條件 return item > 0 }) var result = arr.some(function(item,index){ //檢測數組中是否有某些項符合條件(只有滿足一個即為true) return item > 1 }) var result = arr.every(function(pre,next){ //讓數組中的前項和后項做某種計算,并累計最終值 return pre + next })2.生成新數組的迭代器方法
map() ,和 forEach() 相似,對數組中的每個元素使用某個函數,區別在于返回一個新的數組,該數組的元素是對原有元素應用某個函數得到的結果。
filter() ,和 every() 類似,傳入一個返回值為布爾類型的函數,不同的是當對數組中紅所有元素應用該函數時,結果均為 true 時, 該方法不返回
true,二十返回一個新數組,該數組包含應用該函數后結果為true 的元素。
var arr = [1,2,3,4,5] var newArr = arr.map(function(item,index){ //讓數組通過某種計算產生一個新數組 return item * 2 }) newArr => [2,4,6,8,10] var newArr2 = arr.filter(function(item,index){ //篩選出數組中符合條件的項,組成新數組 return item > 3 }) newArr2 => [4,5]二維數組和多維數組 1.創建二維數組
Array.matrix = function(numrows,numcols,initial) { var arr = []; for (var i = 0; i < numrows; ++i) { var columns = []; for (var j = 0; j < numcols; ++j) { columns[j] = initial; } arr[i] = columns; } return arr; }
數組 完
以上皆為個人觀點 如若有誤 還望指正
參考書籍《JavaScript語言精粹》
《JavaScript高級程序設計》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86535.html
摘要:正確的解釋是允許在相等比較中進行強制類型轉換,而不允許。參考資料小議下字符串比較大小中的強制類型轉換核心概念類型轉換對象和方法隱式類型轉換小結 開胃菜 先說一個題外話,我在工作中遇到一個問題,需要比較 08:00 和 09:00 的大小,最后我找到三種方法: 在兩個字符串前后各拼接相同的年月日和秒,拼成完整的時間格式進行比較: var head = 2016-01-01 var fo...
摘要:關鍵字在中的變化非常的靈活,如果用的不好就非常惡心,用的好程序就非常的優雅,靈活,飄逸所以掌握的用法,是每一個前端工程師必知必會的而且這個也是一些大公司筆試中常見的考察項第一種單獨的,指向的是這個對象注當前的執行環境是所以指向了第二種全局函 this關鍵字在javascript中的變化非常的靈活,如果用的不好就非常惡心,用的好,程序就非常的優雅,靈活,飄逸.所以掌握this的用法,是每...
閱讀 3492·2021-11-12 10:36
閱讀 2866·2021-09-22 15:35
閱讀 2816·2021-09-04 16:41
閱讀 1168·2019-08-30 15:55
閱讀 3580·2019-08-29 18:43
閱讀 2076·2019-08-23 18:24
閱讀 1419·2019-08-23 18:10
閱讀 1924·2019-08-23 11:31