數(shù)組定義好后,第一步肯定是填充元素。這時我們會使用push方法,將一個元素添加到數(shù)組末尾。
var arr = [1,2,3]; arr.push(4); // [1,2,3,4]
與之對應(yīng)的是pop方法,作用是刪除數(shù)組中最后一個元素,并返回這個元素。
var arr = [1,2,3]; arr.pop(); // 3 console.log(arr); // [1,2]
還可以使用unshift將元素添加到數(shù)組最前面,而使用shift從數(shù)組最前面刪除一個元素。
var arr = [1,2,3]; arr.unshift(0); // [0,1,2,3] arr.shift(); // 0 console.log(arr); // [1,2,3]
除了在數(shù)組兩端進(jìn)行添加刪除,在任意位置插入和刪除元素也是常見的需求。splice方法可以實(shí)現(xiàn)這個功能,在指定位置插入、刪除、替換一個或多個元素。
var arr = [1,2,3]; arr.splice(1, 0, 4); // [1,4,2,3] arr.splice(1, 1); // [1,2,3] arr.splice(1, 2, 'a', 'b'); // [1,'a','b']
以上三個方法都會修改原數(shù)組,使其發(fā)生變化。如果只是要獲取數(shù)組的一部分元素,用的是slice方法。它將返回一個新數(shù)組,包含原數(shù)組從start位置到end位置之間的所有元素。
var arr = [1,2,3,4,5]; var subArr = arr.slice(1, 4); console.log(subArr); // [2,3,4]
slice方法返回的是原數(shù)組的一個淺拷貝,所以它對原數(shù)組沒有影響。但如果原數(shù)組中包含對象,那么拷貝的結(jié)果就只是對象的引用,因此修改原數(shù)組和子數(shù)組中的對象都會互相影響。
對于數(shù)組中的元素,我們有時可能需要判斷他們滿足某個條件,或者按照某種方式排序。這個時候可以使用filter和sort方法。
filter方法用于篩選數(shù)組元素,返回一個新數(shù)組,其中只包含滿足條件的元素。例如,我們要從一個數(shù)組中篩選出所有大于2的元素,可以這樣寫:
var arr = [1,2,3,4,5]; var newArr = arr.filter(function(item){ return item >2; }); console.log(newArr); // [3,4,5]
sort方法用于排序數(shù)組,可以自定義排序函數(shù)。默認(rèn)情況下sort按字符編碼進(jìn)行排序,這是不正確的,因?yàn)樗J(rèn)為數(shù)字'10'比數(shù)字'2'要小。如果我們需要按照數(shù)字大小排序,需要指定一個比較函數(shù)。
var arr = [1,20,3,45,5]; arr.sort(function(a, b){ return a - b; }); console.log(arr); // [1,3,5,20,45]
我們可以用forEach方法遍歷數(shù)組中的元素,對它們進(jìn)行操作。forEach方法接收一個函數(shù),這個函數(shù)將會對數(shù)組中的每個元素都調(diào)用一次。
var arr = [1,2,3]; arr.forEach(function(item, index){ console.log(index, item); }); // 0, 1 // 1, 2 // 2, 3
map方法也可以對數(shù)組中的元素進(jìn)行操作,不同的是它會返回一個新的數(shù)組。具體來說,map方法取出數(shù)組中的每一個元素,將其作為參數(shù)傳給函數(shù),該函數(shù)返回的值被放入新的數(shù)組中。
var arr = [1,2,3]; var newArr = arr.map(function(item){ return item * 2; }); console.log(newArr); // [2,4,6]
reduce方法可以理解為一個求和函數(shù),它能夠?qū)⒁粋€數(shù)組中的所有元素按照順序遍歷,按照自定義的方式合并成一個值。比如我們要將數(shù)組中的所有元素求和,可以這樣寫:
var arr = [1,2,3]; var sum = arr.reduce(function(prev, cur){ return prev + cur; }, 0); console.log(sum); // 6
reduce方法接收一個函數(shù)和一個初始值。在上面的例子中,初始值為0,函數(shù)將逐個加入的元素依次放入第一個參數(shù)prev和第二個參數(shù)cur中,對prev和cur進(jìn)行操作并返回。reduce方法最終將返回一個值,也就是所有元素合并后的結(jié)果。
除了以上幾個方法,JavaScript官方還提供了更多的數(shù)組方法,比如indexOf、lastIndexOf、concat、join、toString等等。這些方法用于解決數(shù)組相關(guān)的各種問題,需要掌握和靈活使用。
在實(shí)際開發(fā)中,數(shù)組是不可避免的數(shù)據(jù)結(jié)構(gòu)。利用JavaScript中提供的強(qiáng)大數(shù)組方法,可以大大簡化我們的開發(fā)和維護(hù)工作。因此,對于這些方法的熟練掌握和靈活使用是每一個JavaScript開發(fā)者必備的技能之一。