Array類型 也是 中常用類型之一,其特點是數組中的每一項都可以保存任何類型的數據,數組的大小可以動態調整。 創建數組 方式1:使用 構造函數 var books = new Array(); var books = new Array(20); //如果知道數組的大小,可以給構造函數傳遞該參數 ...
Array類型
Array
也是ECMAScript
中常用類型之一,其特點是數組中的每一項都可以保存任何類型的數據,數組的大小可以動態調整。
創建數組
方式1:使用
Array
構造函數
var books = new Array();
var books = new Array(20); //如果知道數組的大小,可以給構造函數傳遞該參數
var books = new Array("English", "math"); //創建包含三個字元串的數組
var books = Array(); //new關鍵字可以省略
方法2:使用數組字面量表示法
var books = ["englisg", "math"];
var names = [];
var tasks = [,,,,]; //不推薦用法,會根據瀏覽器的不同,創建4或者5項的數組
設置和讀取數組
var colors = ["blue", "yellow", "red"];
alert(colors[0]); //使用方括弧並提供基於相應值的基於0的數字索引
colors[3] = "black"; //可以替換指定位置的值;如果索引超過了數組現有的項數,只超出一項,則數組的索引值自動加1;像本利中如果colors[4]="green",那colors[3]會被自動存入undefined
length屬性
length
始終返回0或者更大的值,且它不是只讀的,通過該屬性可以從數組的末尾移除項或向數組中添加添加新項:
var books = ["English", "math"];
books.length = 1;
console.log(books[1]); //undefined
var books = ["English", "math"];
books.length = 2;
console.log(books[2]); //undefined
//數組的最後一項的索引始終是length-1,因此下一個新項目的位置就是length,用來添加項目非常方便
var books = ["English"];
books[books.lenth] = "math";
檢測數組
if(Array.isArray(value)) {
//對數組執行某些操作
}
轉換方法
var books = ["English", "math"];
console.log(books.toString()); //English,math
console.log(books.valueOf());//["English", "math"]
console.log(books);//["English", "math"]
數組繼承的toLocaleString()
、toString()
、valueOf()
方法,在預設情況下都會以逗號分割的字元串的形式返回數組項。如果使用join()
方法,則可以使用不同的分隔符來構建這個字元串。
//join()方法接收一個參數,即分隔符
var books = ["English", "math"];
console.log(books.join(",")); //English,math
console.log(books.join("||")); //English||math
棧方法
push()
方法接收任意數量的參數,把它們逐個添加到數組的末尾,並返回修改後數組的長度
var books = new Array();
var count = books.push("English", "math");
console.log(count); //2
count = books.push("Chinese");
console.log(count); //3
pop()
方法則從數組末尾移除最後一項,減少數組的length值,然後返回移除的項
var item = books.pop();
console.log(item); //Chinese
console.log(books.length); //2
隊列方法
shift()
能夠移除數組中的第一個項並返回該項,同時數組長度減1
var books = new Array();
var count = books.push("English", "math");
console.log(count); //2
count = books.push("Chinese");
console.log(count); //3
var item = books.shift();
console.log(item); //English
console.log(books.length); //2
unshift()
能在數組前端添加任意個項並返回新數組的長度
var books = new Array();
var count = books.unshift("English", "math");
console.log(count); //2
count = books.unshift("black");
console.log(count); //3
var item = books.pop();
console.log(item); //math
console.log(books.length); //2
重排序方法
reverse()
翻轉數組項的順序
var num = [1, 4, 3, 5, 2];
num.reverse();
console.log(num); //[2, 5, 3, 4, 1]
sort()
按照升序排列數組項,該方法會調用每個數組項的toString()
轉型方法,然後比較得到的字元串,然後這種方法並不是最佳的,即使數組中每一項都是數值,但是最後比較的都是字元串,因此sort()
方法可以接受一個比較函數座位參數,方便指定哪個值位於哪個值的前面。
function compare(val1, val2) {
if(val1 < val2){
return 1;
} else if(val1 > val2){
return -1;
} else {
return 0;
}
}
var num = [0, 1, 4, 10, 12];
num.sort(compare);
console.log(num); //[12, 10, 4, 1, 0]
操作方法
concat()
方法可以基於當前數組中的所有項創建一個新數組
var books = ["English", "math"];
//傳遞給concat()方法的是一或多個數組,則該方法會將這些數組中的每一項都添加到結果數組中
var books2 = books.concat("PE", ["Chinese", "Chemistry"]);
console.log(books); //["English", "math"]
console.log(books2); //["English", "math", "PE", "Chinese", "Chemistry"]
slice()
方法能夠基於當前數組中的一個或者多個項創建一個新數組
var books = ["English", "math", "Computer"];
var books2 = books.slice(1); //表示從1位置開始截取
var books3 = books.slice(1, 2); //表示從1位置開始截取,到位置2結束
console.log("books2"); // ["math", "Computer"]
console.log("books3"); // ["math"]
splice()
方法
- 刪除 指定兩個參數, 要刪除的第一項的位置和要刪除的項數
- 插入 指定三個參數,起始位置、0(要刪除的項數),要插入的項
替換 指定三個參數, 起始位置,要刪除的項數和要插入的任意數量的項
//刪除第一項
var books = ["English", "math", "Chinese"];
var removed = books.splice(0, 1);
console.log(books); //["math", "Chinese"]
console.log(removed); // ["English"]//從位置1開始插入兩項
removed = books.splice(1, 0, "PE", "Chemistry");
console.log(books); // ["math", "PE", "Chemistry", "Chinese"]
console.log(removed); // []//插入兩項,刪除一項
removed = books.splice(1, 0, "English", "Biology");
console.log(books); //["math", "English", "Biology", "PE", "Chemistry", "Chinese"]
console.log(removed); // []
位置方法
indexOf()
從數組的開頭(位置0)開始向後查找,返回要查找的項在數組中的位置,沒找到返回-1
lastIndexOf()
從數組的末尾開始向前查找var num = [1, 2, 4, 7];
console.log(num.indexOf(2)); //1
迭代方法
一共5個迭代方法,每個方法都接收兩個參數:在每一項商譽性的函數和運行在該函數的作用域的對象--影響this的值。傳入這些方法中的函數會接收三個參數,數組項的值、該項在數組中的位置和數組對象本身//對數組中每一項都運行指定函數,如果這個函數對每一項的結果都是true,就返回true
var num = [1, 2, 4, 5, 6];
var everyResult = num.every(function(item, index, array){
return(tiem >2 );
})
console.log(everyResult); //false//對數組中的每一項都運行指定函數,如果這個函數對任一項的結果返回true,就返回true
var someResult = num.some(function(item, index, array){
return (item >2);
})
console.log(someResult); //true//filter()方法,有了前面兩個例子,顧名思義該方法是對數組中的項用指定的函數來進行過濾,將過濾得到的項組成數組返回
var num = [1, 2, 4];
var filterResult = num.filter(function(item, index, array){
return (item > 2);
})
console.log(filterResult); //[4]//map()方法也返回一個數組,是針對原有數組的每一項運行傳入函數的結果,所組成的新的數組
var num = [1, 2, 3];
var mapResult = num.map(function(item, index, Array){
return item*2;
})
console.log(mapResult);//[2, 4, 6]//forEach()對數組中的每一項進行迭代,該方法沒有返回值
var num = [1, 2, 3];
num.forEach(function(item, index, Array){
//執行操作
})
歸併方法
reduce()
和reduceRight()