JS中的數組
JS中的數組和其他語言不同的是一個數組可以保存多個類型的值,比如數組中第一個位置保存一個字符類型的值,第二個可以保存數值型的值,第三個則可以保存一個對象。
聲明方式:
var color = new Array();
var color = new Array(20);
var color = new Array("red","blue","green");
另外數組中的length屬性不是只讀的,可以通過這個屬性設置數組的長度。
例如:
var color = new Array("red","blue","green");
color[color.length]="black"; //在位置3添加一種顏色
color[color.length]="brown";//在位置4添加一種顏色
這樣依次在最后的位置添加元素,對于跨長度添加也是可以的,例如在100的位置添加一個元素,但這個區間沒有賦值的元素都會為undefined
檢測對象是否為數組
if (Array.isArray(value)) { }
數組的tostring()、valueOf()、join()方法
這些方法會將數組內每項元素用逗號分隔開
color.toString(); //red,blue,green
color.valueOf();//red,blue,green
color.join("|"); //red|blue|green Join方法,表示用哪種符號分隔數組元素
另外,需要注意如果數組中的元素存在undefined或null時,則上面的方法返回的是空字符串。
Push、pop、shift方法
color.push("white", "org") ;
在數組末尾添加兩個元素,push里的數量不固定,可隨意,另外這個方法有一個返回值,這個返回值,是數組的length
color.pop();
獲取數組的最后一個元素。
color.shift()
獲取第一項,并移除第一項
排序
數組中提供了兩個默認的排序方法,分別是reverse()和sort()
var values=[0,1,5,10,15]
reverse()方法是反轉數組的順序,按數組的下標倒序顯示。values.reverse() //15,10,5,1,0
sort()方法是將內部的值進行tostring后進行排序。values.sort() //0,1,10,15,5
顯然上面的排序是有錯誤的,因為比較的是字符串類型的所以會認為5比1大。
如果想得到正確的結果,可以向這個方法傳遞一個比較函數作為參數。
比較函數接收兩個參數,如果第一個參數應該位于第二個之前,則返回一個負數,如果相等,則返回0,如果第一個位于第二之后,則返回正數,例如:
function compare(value1, value2) {
if (value1 < value2) {
return -1
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
values.sort(compare);
這樣就可以正確排序了。如果逆序的話,則適當修改返回值,就可以。
如果只是數值類型的比較,則代碼更為簡單。
function compare(value1,value2){
return value1-value2
}
concat、slice 方法
concat方法可以進行數組之間的連接,也可添加新元素
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]); //red,green,blue,yellow,black,brown
slice方法接收兩個參數,起始位置和操作的個數,他可以進行刪除、插入、替換,slice始終都會返回一個數組,該數組包含從原始數組中刪除的項,如果沒有任何項,則返回一個空數組。
var colors = ["red", "green", "blue"];
var removed = colors.splice(0, 1); //刪除第一項,并red
var removed = colors.splice(1, 0, "yellow", "orange");//從第一個位置插入兩項,返回空
var removed = colors.splice(1, 1, "red", "purple"); //刪除第二項,插入兩項,返回blue
位置方法 indexOf和lastIndexOf
這兩個方法都接收兩個參數,分別是要查找的項和查找的起點位置。
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
numbers.indexOf(4); //返回3
numbers.lastIndexOf(4) //返回5 從末尾開始查找
如果這兩個方法沒有找到搜索項,則返回-1。
迭代方法
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
every() : 如果該函數的每一項都返回true ,則返回true
var everyResult = numbers.every(function (item, index, array) {
return (item > 2);
}); //返回false
filter() : 返回函數中滿足條件的元素組成的數組。
var filterResult = numbers.filter(function (item, index, array) {
return (item > 2);
}); // 返回 [3,4,5,4,3]
forEach() : 循環遍歷數組,這個方法沒有返回值。
numbers.forEach(function (item, index, array) {
//執行某些操作。
});
map() : 返回每次調用的結果組成的數組。
var mapResult = numbers.map(function (item, index, array) {
return (item * 2);
}); //[2,4,6,8,10,8,6,4,2]
some() : 如果函數中,有任意一項返回true ,則返回true 。
var someResult = number.some(function (item, index, array) {
return (item > 2);
}); //true
歸并方法
歸并方法有reduce()和reduceRight()兩個方法,reduce是數組的第一項開始遍歷到最后,reduceRight是從最后一項開始,遍歷到第一項。
這兩個函數分別接受4個參數:前一個值,當前值,項的索引和數組對象。
var values=[1,2,3,4,5]
var sum = values.reduce(function (prev, cur, index, array) {
return prev + cur;
}); //返回15