javascript
JS引用类型 -- Array类型
ECMAScript數(shù)組與其他語言中的數(shù)組都是數(shù)據(jù)的有序列表,但與其他語言不同的是,ECMAScript數(shù)組的每一項可以保存任何類型的數(shù)據(jù)。而且ECMAScript數(shù)組的大小是可以動態(tài)調整的,即可以隨著數(shù)據(jù)的添加自動增長。
創(chuàng)建數(shù)組的基本方式有兩種:
第一種是使用Array構造函數(shù):
//1. 使用Array構造函數(shù) var colors = new Array();//2.如果預先知道數(shù)組要保存的項目數(shù)量,也可以給構造函數(shù)傳遞該數(shù)量,改數(shù)量會自動變成length的屬性值 var colors2 = new Array(20); alert(colors2.length); //20//3.也可以向Array構造函數(shù)傳遞數(shù)組中應該包含的項。 var colors3 = new Array("red", "blue", "green");//4.給構造函數(shù)傳遞一個值時,如果傳遞的是數(shù)值,表示該數(shù)組的長度。如果傳遞的是其他類型,則會創(chuàng)建包含那個值的數(shù)組 var colors4 = new Array(3); // 創(chuàng)建一個包含3項的數(shù)組 var colors5 = new Array("Greg"); //創(chuàng)建一個包含1項的數(shù)組//5. 在使用Array構造函數(shù)時也可以省略new操作符 var colors6 = Array(3); var names = Array("Greg");第二種是使用數(shù)組字面量表示法: 數(shù)組字面量是由一對包含數(shù)組項的方括號表示,多個數(shù)組項之間以逗號隔開
var colors = ["red", "blue", "green"]; //創(chuàng)建一個包含三個字符串的數(shù)組 var names = []; //創(chuàng)建一個空數(shù)組//在讀取和設置數(shù)組的值時,要使用方括號并提供相應值的基于0的數(shù)字索引 alert(colors[0]); //red colors[2] = "black"; colors[3] = "brown"; //索引大于數(shù)組項時,自動增加一個 alert(colors.length); //4 colors[99] = "black"; alert(colors.length); //1001.檢測數(shù)組
instanceof :
Array.isArray(): 確定某個值是否為數(shù)組
if(Array.isArray(colors)){alert("yes"); }2.轉換方法
toString() 方法: 返回由數(shù)組中每個值的字符串形式拼接而成的一個以逗號分隔的字符串。
valueOf() 方法: 返回的還是數(shù)組。
var colors = ["red", "blue", "green"]; //創(chuàng)建一個包含三個字符串的數(shù)組 alert(colors.toString()); //red,blue,green alert(colors.valueOf()); //red,blue,green alert(colors); //red,blue,green上述代碼顯示的調用了toString()和valueOf()方法,以便返回數(shù)組的字符串表示,每個值的字符串表示拼接成了一個字符串,中間以逗號隔開。最后一行代碼直接將數(shù)組傳遞給了alert()。由于alert()要接收字符串參數(shù),所以它會在后臺調用toString()方法,由此會得到與直接調用toString()方法相同的結果。
數(shù)組繼承的toLocaleString()、toString()和valueOf()方法,在默認情況下都會以逗號分隔的字符串形式返回數(shù)組項,如果使用join()方法,則可以使用不同的分隔符來構建這個字符串。join()方法只接收一個參數(shù),即分隔符的字符串。
var colors = ["red", "blue", "green"]; //創(chuàng)建一個包含三個字符串的數(shù)組 alert(colors.join("||")); //red||blue||green3. 棧方法
ECMAScript數(shù)組也提供了一種讓數(shù)組的行為類似其他數(shù)據(jù)結構的方法。
棧是一種LIFO(Last-In-First-Out)的數(shù)據(jù)結構。也就是最新添加的項最早被移除。棧中項的插入(推入)和移除(彈出),只發(fā)生在一個位置上--- 棧的頂部。
push() 方法: 可以接受任意數(shù)量的參數(shù),把它們逐個添加到數(shù)組的末尾,并返回修改后數(shù)組的長度。
pop() 方法: 從數(shù)組末尾移除最后一項,減少數(shù)組的length值,然后返回移除的項。
var colors = ["red", "blue"]; var count = colors.push("green"); alert(count); //3 count = colors.push("black"); alert(count); //4var item = colors.pop(); alert(item); //black4. 隊列方法
隊列數(shù)據(jù)結構的訪問規(guī)則是FIFO(First-In-First-Out)。隊列在列表的末端添加項,從列表的前端移除項。
push() 方法: 向數(shù)組末尾中添加項。
shift() 方法: 移除數(shù)組中的第一項并返回該項。
unshift() 方法: 在數(shù)組前端添加任意項并返回新數(shù)組的長度。
var colors = new Array(); var count = colors.push("red", "green"); alert(count); //2 count = colors.push("black"); alert(count); //3var item = colors.shift(); alert(item); //red count = colors.unshift("summer", "chen"); alert(count); //4 alert(colors); //summer,chen,green,black5.重排序方法
數(shù)組中已經存在兩個可以直接用來排序的方法:
reverse() 方法: 反轉數(shù)組項的順序
sort(): 方法:在默認情況下,按升序排列數(shù)組項。sort()方法會調用每個數(shù)組項的toString()轉型方法,然后比較得到的字符串。
var values = [0, 1, 3, 15, 5, 10]; values.reverse(); alert(values); //10,5,15,3,1,0 values.sort(); alert(values); //0,1,10,15,3,5sort()方法可以接收一個比較函數(shù)作為參數(shù)。
比較函數(shù)接收兩個參數(shù),如果第一個參數(shù)應該位于第二個之前——返回一個負數(shù);兩個參數(shù)相等——返回0;第一個參數(shù)該位于第二個之后——返回一個正數(shù)。
function compare(value1, value2){if(value1 < value2){return -1;}else if(value1 == value2){return 0;}else{return 1;} } var values = [0,15,10,5,1]; values.sort(compare); alert(values); //0,1,5,10,15對于數(shù)值類型 或 其valueOf()方法會返回數(shù)值類型的對象類型,可以使用下列方法:
function compare(value1, value2){return value2 - value1; } var values = [0,15,10,5,1]; values.sort(compare); alert(values); //0,1,5,10,156.操作方法
concat() 方法: 基于當前數(shù)組中的所有項創(chuàng)建一個新數(shù)組。具體來說,這個方法會先創(chuàng)建當前數(shù)組的一個副本,然后講接收到的參數(shù)添加到這個副本的末尾,最后返回新構建的數(shù)組。在沒有給concat()方法傳遞參數(shù)的情況下,它只是復制當前數(shù)組并返回副本。如果傳遞給concat()方法的是一或多個數(shù)組,則該方法會將這些數(shù)組中的每一項都添加到結果數(shù)組中。如果傳遞的值不是數(shù)組,這些值就會簡單的添加到結果數(shù)組的末尾。
slice() 方法: 基于當前數(shù)組中的一個或多個項創(chuàng)建一個新數(shù)組。slice()方法可以接受一個或兩個參數(shù),即要返回項的起始和結束的位置。slice方法不會影響原始數(shù)組。
var colors = ["red", "green", "blue", "black", "brown"];//1. 在只有一個參數(shù)的情況下,slice方法返回從該參數(shù)位置開始到當前數(shù)組末尾的所有項 var colors2 = colors.slice(1); alert(colors2); //green,blue,black,brown//2.有兩個參數(shù),該方法返回起始位置和結束位置之間的項,不包括結束位置的項 var colors3 = colors.slice(1,3); alert(colors3); //green,bluevar colors4 = colors.slice(3,1); alert(colors4); //空數(shù)組var colors5 = colors.slice(1,1); alert(colors5); //空數(shù)組var colors6 = colors.slice(5); alert(colors6); //空數(shù)組var colors7 = colors.slice(3, 15); alert(colors7); //black,brownsplice()方法:主要用途是向數(shù)組中部插入項。改方法返回被刪除的項。
var colors = ["red", "green", "blue", "black", "brown"];//1. 刪除: 可以刪除任意數(shù)量的項,只需指定第一項的位置和要刪除的項數(shù)。返回被刪除的項 var colors2 = colors.splice(1,3); alert(colors2); //green,blue,black alert(colors); //red, brown//2.插入:提供三個參數(shù):起始位置、0(要刪除的項數(shù))、要插入的項 var colors3 = colors.splice(1,0, "summer", "holiday"); alert(colors); //red,summer,holiday,brownvar colors4 = colors.splice(-1,0, "summer", "holiday");//起始位置小于0時,按0計算 alert(colors); //red,summer,holiday,summer,holiday,brownvar colors5 = colors.splice(10,0, "summer", "holiday");//起始位置大于數(shù)組長度時,按數(shù)組長度計算 alert(colors); //red,summer,holiday,summer,holiday,brown,summer,holiday alert(colors.length); //8//3.替換:可以向指定位置插入任意數(shù)量的項,且同時刪除任意數(shù)量的項,三個參數(shù):起始位置,要刪除的項數(shù),要插入的項 var colors6 = colors.splice(1, 4, "green", "blue", "black"); alert(colors6); //summer,holiday,summer,holiday alert(colors); //red,green,blue,black,brown,summer,holiday7. 位置方法
ECMAScript提供了兩個位置方法,這兩個方法都接收兩個參數(shù),要查找的項和查找起點位置的索引(可選的)
indexOf() 方法: 從數(shù)組的開頭(位置0)開始向后查找。
lastIndexOf() 方法:從數(shù)組的末尾開始向前查找。
var numbers = [1,2,3,4,5,4,3,2,1];alert(numbers.indexOf(4)); //3 alert(numbers.lastIndexOf(4));//5 alert(numbers.indexOf(4,4));//5 alert(numbers.lastIndexOf(4,4));//3 alert(numbers.indexOf(6));//-1 alert(numbers.lastIndexOf(6));//-1var person = {name: "Nicholas"}; var people = [{name: "Nicholas"}];var morePeople = [person];alert(people.indexOf(person)); //-1 alert(morePeople.indexOf(person));//08. 迭代方法
ECMAScript為數(shù)組定義了5個迭代方法。每個方法都接收兩個參數(shù): 每一項上運行的函數(shù)和運行該函數(shù)的作用域對象(可選的)--影響this值。
傳入這些方法中的函數(shù)接收三個參數(shù):數(shù)組項的值、該項在數(shù)組中的位置、數(shù)組對象本身
every() 方法:? 對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對每一項都返回true,則返回true
filter() 方法: 對數(shù)組中的每一項運行給定函數(shù),返回該函數(shù)會返回true的項組成的數(shù)組
forEach() 方法:對數(shù)組中的每一項運行給定函數(shù),該函數(shù)沒有返回值
map() 方法:對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)調用的結果組成的數(shù)組
some() 方法:? 對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對任一項返回true,則返回true
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); //3,4,5,6,7,6,5,4,39.縮小方法
ECMAScript有兩個縮小數(shù)組的方法。這兩個方法都會迭代數(shù)組的所有項,然后構建一個最終返回的值。這兩個方法都接收兩個參數(shù),在每一項上調用的函數(shù)和作為縮小基礎的初始值。
傳入這些方法的函數(shù)接收四個參數(shù):前一個值、當前值、項的索引、數(shù)組對象。這個函數(shù)返回的任何值都會作為第一個參數(shù)自動傳給下一項。第一次迭代發(fā)生在數(shù)組的第二項上,因此第一個參數(shù)是數(shù)組的第一項,第二個參數(shù)就是數(shù)組的第二項。
reduce() 方法: 從數(shù)組的第一項開始,逐個遍歷
reduceRight() 方法: 從數(shù)組的最后一項開始,向前遍歷到第一項
var values = [1,2,3,4,5]; var sum = values.reduce(function(prev, cur, index, array){return prev + cur;}); alert(sum); //15 var sum2 = values.reduceRight(function(prev, cur, index, array){return prev + cur;}); alert(sum2); //15?
轉載于:https://www.cnblogs.com/PrajnaParamita/p/5865487.html
總結
以上是生活随笔為你收集整理的JS引用类型 -- Array类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: system什么意思c语言,system
- 下一篇: 详解SpringMVC中Controll