- concat():
對數組進行拼接,具有打散插入的數組的功能,返回新數組,無權修改原數組。如果給這個concat傳遞的是數組,就將這個數組打散,再把打散的數組元素添加到arr后面,如果傳人的不是數組,這些值就會被簡單的添加到數組末尾。
</script>```
- slice():
對數組進行截取,**無權修改原數組**。接受一或兩個參數,一個參數:var arr1=arr.slice(starti);從指定參數starti開始到當前數組所有項末尾。 兩個參數,var arr1=arr.slice(starti,end);返回從starti開始位置到end結束位置的項,但不包括結束位置的項;支持負數參數:表示倒數第n個位置,其實執行的還是length-n。starti默認從零開始。
```<script>var arr=[1,2,3,4,5];var arr1=arr.slice(1); //[3,4]var arr2=arr.slice (1,3); //[2,3]var arr3=arr.slice (-2,4); //等價于=>arr3.slice(arr.length-2,4);//[4]
</script>```
- splice()
1.刪除元素,插入元素,替換元素。**直接修改原數組。** 刪除元素:可以刪除任意數量的項,只需指定2個參數:要刪除的第一項的位置和要刪除的項數。
```<script>var arr=[1,2,3,4,5];var arr1=arr.slice(0,2); //刪除數組前兩項返回[3,4,5]
</script>```
2.插入:可以向指定任意位置插入任意數量的項,只需要提供三個參數:起始位置,0(要刪除的項數)和要插入的項。如果要插入多個項,可以再傳第四,第五,以致任意多個項。
```<script>var arr=[1,2,3,4,5];arr.splice(2,0,"a","b"); //從當前數組位置2插入字符串"a","b"。修改后的數組為:[1,2,"a","b",3,4,5]</script>```
3.替換:可以向指定任意位置插入任意數量的項,且同時刪除任意數量的項,只需要提供三個參數:起始位置,和要刪除的項,和要插入任意數量項,插入的項數和刪除的項數不必相等。
```<script>var arr=[1,2,3,4,5];arr.splice(2,1,"a","b"); //會刪除當前數位置2的項,然后再從當前數組位置2插入字符串"a","b"。修改后的數組為:[1,2,"a","b",4,5]
</script>```
注意:splice方法會返回被刪除的元素組成的臨時數組。用于后續的操作。
- reverse()
顛倒數組中的元素: **直接修改原數組**只是機械的將數組顛倒。
```<script>var arr=[1,2,3,4,5];arr.reverse();//[5,4,3,2,1]</script>```
- String(arr)
將每個元素都轉為字符串,用","相連。常用于數組經過一些操作后判斷數組是否發生變化。所以又稱為數組的拍照,即用于前后對照。**無權修改原數組。**
```<script>var arr=[1,2,3,4,5];var arr2=String(arr);//1,2,3,4,5 字符串</script>```
- join("連接符")
連接符可以自定義,將每個元素都轉為字符串,用自定義的"連接符"相連。**無權修改原數組。**無縫拼接: arr.join("")如果省略“”,就和String等效了。
```<script>var arr=[1,2,3,4,5];var arr2=arr.join("-");//1-2-3-4-5 字符串var arr2=arr.join("*");//1*2*3*4*5 字符串</script>```
- indexOf()
兩個參數,要查找的項和起始位置(可選)。沒找到返回-1。```<script>var arr=[1,2,3,4];arr.indexOf(2);//3 arr.indexOf(keyword,stari); //keyword:要查找的對象,stari:查找開始位置;省略stari默認從0開始。
</script>```
- lastIndexOf()
從數組末尾開始向前查找。
```var arr=[1,2,3,0,5,6,5,4,3,2,6];arr.lastIndexOf(keyword,endi); //keyword:要查找的對象,endi:查找開始位置;省略endi默認從arr.length開始。arr.lastIndexOf(4,9);//7 第二個參數可以是超過數組長度;```
- every()
判斷每個元素是否**都滿足**要求 arr.every(function(val,idx,arr){ //回調函數用于檢測每個元素: //val: 自動獲得當前元素值 //idx: 自動獲得當前元素的位置 //arr: 自動獲得當前正在遍歷的數組 return 判斷結果; })
```<script> var arr1=[1,2,3,4,5]; var arr2=[10,8,6,4,2]; var arr3=[1,3,9,7,5]; //判斷是否都由偶數組成: console.log( arr1.every(function(val){ return val%2==0; }),//false arr2.every(function(val){ return val%2==0; }),//true arr3.every(function(val){ return val%2==0; })//false );
</script>```
- some()
判斷是否**包含**滿足要求的元素 arr.some(function(val,idx,arr){ //回調函數用于檢測每個元素: //val: 自動獲得當前元素值 //idx: 自動獲得當前元素的位置 //arr: 自動獲得當前正在遍歷的數組 return 判斷結果; })用法同every()。
- forEach()
此方法比較重要, 用處很大。作用為對原數組中每個元素執行相同的操作。 arr.forEach(function(val,idx,arr){ //對arr[idx]的值做修改 })
```<script> var arr=[1,2,3,4,5]; var result=arr.forEach(function(val,idx,arr){ arr[idx]*=2;//直接對原數組的值進行修改 }) console.log(arr);//[2,4,6,8,10]
</script>```
**自己實現forEach方法**
```<script>if(Array.prototype.forEach===undefined){ Array.prototype.forEach=function(callback){ //遍歷當前數組中每個元素 for(var i=0;i<this.length;i++){ //如果i位置有元素 if(this[i]!==undefined) //調用callback函數,傳入:當前元素值,當前位置,當前數組作為參數 callback(this[i],i,this); } } }
</script>```
- filter()
過濾數組,復制出原數組中符合要求的元素,組成新數組。 var subArr=arr.filter( function(val,idx,arr){ return 條件 } );
```<script> var arr=[1,2,3,4,5]; var evens=arr.filter(function(val){ return val%2==0; }); var odds=arr.filter(function(val){ return val%2==1; }) console.log(evens);//[2,4] console.log(odds);[1,3,5] console.log(arr);//[1,2,3,4,5]//不修改原數組 </script>
- reduce()
將數組中每個元素的值匯總出一個結果。 var r=arr.reduce( function(prev,val,idx,arr){ //prev: 獲得目前截止的匯總值 return prev和val的匯總值 }, 開始值 );
<script> var arr1=[1,2,3,4,5]; var r=arr1.reduce(function(prev,val){ return prev+val; });//15 console.log(r); var arr2=[6,7,8,9,10]; r=arr2.reduce(function(prev,val){ return prev+val; },r);//對第一次的15再累加到第二次 console.log(r);//55 <script>
- map()
基于原數組,將每個元素加工后,生成新數組。 arr.map(function(val,idx,arr){ //根據val,修改后,返回給新數組 return 新值; })
var evens=arr.map(function(val,idx,arr){ return val*2; }); console.log(arr);//[1,2,3,4,5]不修改原數組 console.log(evens);//[2,4,6,8,10]返回的新數組
</script> ```
**自己實現map()方法 **
```<script>if(Array.prototype.map===undefined){ Array.prototype.map=function(callback){ //創建新數組arr var arr=[]; //遍歷當前數組中每個元素 for(var i=0;i<this.length;i++){ //如果i位置有元素 if(this[i]!==undefined) //調用callback函數,傳入:當前元素值,i,當前數組作為參數, 將返回值保存到arr的i位置 arr[i]=callback(this[i],i,this); } return arr;//返回arr } }
</script> ```
以上就是數組常用的方法,數組在程序中應用中占據著重要地位,掌握以上方法可以很輕松的處理各種數組數據。**值得注意的是直接修改原數組的是方法只有splice()和reverse(),其余方法無權修改原數組。所以對于運用了無權修改原數組方法的時候,記得要用變量把操作后的結果保存起來,以用于后續操作**。