javascript数组方法超全总结
2016-09-14 本文已影响50人
十七度的夏天
- 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(),其余方法无权修改原数组。所以对于运用了无权修改原数组方法的时候,记得要用变量把操作后的结果保存起来,以用于后续操作**。