[TOC] 數組 array 解釋器 遇到var聲明的變數,會把var聲明的變數提升到全局作用域下 1. isArray isArray() 判斷當前數組是否為數組,返回值是true,則證明是數組 2. 轉換方法 調用數組的toString()方法會返回由數組中每個值的字元串形式拼接而成的一個以逗號 ...
目錄
數組 array
解釋器 遇到var聲明的變數,會把var聲明的變數提升到全局作用域下
1. isArray
isArray() 判斷當前數組是否為數組,返回值是true,則證明是數組
var arr = ['red','green','yellow'];
console.log(Array.isArray(arr));
2. 轉換方法
調用數組的toString()方法會返回由數組中每個值的字元串形式拼接而成的一個以逗號分隔的字元串。
var num = 123;
var arr = ['red','green','yellow'];
console.log(arr.toString());//red,green,yellow
console.log(num.toString());
console.log(typeof num.toString());
3. 分割字元串 join
join()
方法只接收一個參數。
var arr = ['red','green','yellow'];
console.log(arr.join('^'));
4. 棧方法
數組也可以像棧一樣,既可以插入和刪除項的數據結構。棧是一種LIFO(Last-In-First-Out,後進先出)的數據結構,也就是最新添加的那項元素最早被刪除。而棧中項的插入(叫做推入)和移除(叫做彈出),只發生在一個位置——棧的頂部。數組專門提供了 push() 和 pop() 方法,以便實現類似棧的行為。
1.push()方法
可以接收任意數量的參數,把它們逐個添加到數組末尾,並返回修改後數組的長度。
var arr = ['red','green','yellow'];
console.log(arr.push('purple')); //返回了數組的最新的長度
console.log(arr);
2.pop()方法
從數組末尾移除最後一項,減少數組的 length 值,然後返回移除的項。
var arr = ['red','green','yellow'];
console.log(arr.pop());//返回刪除的內容
console.log(arr);
5. 隊列方法
棧數據結構的訪問規則是 LIFO(後進先出)
,而隊列數據結構的訪問規則是 FIFO(First-In-First-Out, 先進先出)
。隊列在列表的末端添加項,從列表的前端移除項。
1.shift()方法
shift()方法 能夠移除數組中的第一個項並返回該項,同時將數組長度減 1。
var arr = ['red','green','yellow'];
console.log(arr.shift());
console.log(arr);
2.unshift()方法
unshift()方法 能在數組前端添加任意個項並返回新數組的長度
var arr = ['red','green','yellow'];
//往數組的第一項上添加內容
console.log(arr.unshift('gray','black'));
console.log(arr);
6. 重排序方法
數組中已經存在兩個可以直接用來重排序的方法:reverse() 和 sort()
1.reverse()方法
reverse翻轉數組項的順序
var values = [1,2,3,4,5];values.reverse();alert(values); // 5,4,3,2,1
2.sort()方法
預設情況下,sort()
方法按升序排列——即最小的值位於最前面,最大的值排在最後面。 為了實現排序,sort()
方法會調用每個數組項的toString()
轉型方法,然後比較得到的字元串,以確定如何排序 。即使數組中的每一項都是數值,sort()方法比較的也是字元串。
var values = [0,1,5,10,15];varlus.sort();alert(values); //0,1,10,15,5
sort()方法可以接收一個比較函數作為參數,以便我們指定哪個值位於哪個值的前面。 以完成數組中數值的升序和降序功能
比較函數接收兩個參數,如果第一個參數位於第二個參數之前則返回一個負數,如果兩個參數相等則返回0,如果第一個參數位於第二個參數之後則返回正數。
function compare(v1,v2){
if(v1 < v2){
return 1;
}else if (v1 > v2){
return -1;
}else{
return 0;
}
}
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); // 15,10,5,1,0
7. 操作方法
1.concat()方法 — 拼接
數組合併方法,一個數組調用concat()方法去合併另一個數組,返回一個新的數組。concat()接收的參數是可以是任意的。
- 參數為一個或多個數組,則該方法會將這些數組中每一項都添加到結果數組中。
- 參數不是數組,這些值就會被簡單地添加到結果數組的末尾
var colors = ['red','blue','green'];
colors.concat('yello');//["red", "blue", "green", "yello"]
colors.concat({'name':'張三'});//["red", "blue", "green", {…}]
colors.concat({'name':'李四'},['black','brown']);// ["red", "blue", "green", {…}, "black", "brown"]
2.slice()方法 — 對數組進行分割
slice()
方法,它能夠基於當前數組中一個或多個項創建一個新數組。slice()
方法可以接受一或兩個參數,即要返回項的起始和結束位置。
- 一個參數的情況下,slice()方法會返回從該參數指定位置開始到當前數組預設的所有項
- 兩個參數的情況下,該方法返回起始和結束位置之間的項——但不包括結束位置的項(顧頭不顧尾)。
註意: slice()方法不會影響原始數組
var names = ['女神','wusir','太白'];
name.slice(1) // ['wusir','太白']
var colors = ['red','blue','green','yellow','purple'];
colors.slice(1);//["blue", "green", "yellow", "purple"]
colors.slice(1,4);// ["blue", "green", "yellow"]
如果 slice() 方法的參數中有一個負數,則用數組長度加上該數來確定響應的位置。
var colors = ['red','blue','green','yellow','purple'];
colors.slice(-2,-1);//["yellow"]
colors.slice(-1,-2);//[]
3.splice()方法 — 對數組進行添加,刪除,替換操作
splice()
方法這個恐怕要算是最強大的數組的方法了,它有很多種用法。
splice()
的主要用途是向數組的中路插入項。使用這種方法的方式有3種:
- 1.刪除:可以刪除任意數量的項,只需指定2個參數:要刪除的第一項的位置和要刪除的個數。例如
splice(0,2)
會刪除數組中的前兩項 - 2.插入:可以向指定位置插入任意數量的項,只需提供3個參數:起始位置、0(要刪除的個數)和要插入的項。如果要插入多個項,可以再傳入第四、第五、以至任意多個項。例如,
splice(2,0,'red','green')
會從當前數組的位置2開始插入字元串'red'
和'green'
。 - 3.替換:可以向指定位置插入任意數量的項,且同時刪除任意數量的項,只需指定 3 個參數:起始位置、要刪除的項數和要插入的任意數量的項。插入的項數不必與刪除的項數相等。例如,
splice (2,1,"red","green")
會刪除當前數組位置 2 的項,然後再從位置 2 開始插入字元串"red"
和"green"
。
splice()方法始終都會返回一個數組,該數組中包含從原始數組中刪除的項(如果沒有刪除任何 項,則返回一個空數組)。
var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1);
alert(colors); // green,blue
alert(removed); // red,返回的數組中只包含一項
removed = colors.splice(1, 0, "yellow", "orange");
alert(colors); // green,yellow,orange,blue alert(removed); // 返回的是一個空數組
removed = colors.splice(1, 1, "red", "purple");
alert(colors); // green,red,purple,orange,blue alert(removed); // yellow,返回的數組中只包含一項
8. 位置方法 — 索引
indexOf()方法 從數組的開頭(位置 0)開始向後查找
lastIndexOf()方法 則從數組的末尾開始向前查找。
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
9. 迭代方法
1.filter() 函數,它利用指定的函數確定是否在返回的數組中包含某一項.
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item, index, array){
return (item > 2);
});
alert(filterResult); //[3,4,5,4,3]
2.map() 方法也返回一個數組,而這個數組的每一項都是在原始數組中的對應項上運行輸入函數的結果。
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.map(function(item, index, array){
return item * 2;
});
alert(filterResult); //[2,4,6,8,10,8,6,4,2]
3.forEach() 方法
forEach() 方法 只是對數組中的每一項運行傳入的函數( 僅能在數組對象中使用)。這個方法沒有返回值, 本質上與使用 for 迴圈迭代數組一樣。
var names = ['女神','wusir','太白'];
names.forEach(function (index,item) {
console.log(index);
console.log(item);
});
函數 arguments(在函數中arguments 這個對象是偽數組)
function fn(a,b) {
//arguments.length 代指的實參的個數
//arguments它不是一個數組,它被稱為叫偽數組
console.log(arguments);
for(var i = 0; i < arguments.length; i++){
console.log(arguments[i]);
}
}
fn(2,3,4);
console.log(fn.length);//形參的個數