js基础知识(四)
这篇主要是ES5中的一些array方法
- forEach()
遍历数组并使每一个元素都调用指定的函数,需要注意的是无法终止遍历,只能通过try才能停止1
2
3
4
5
6
7
8
9
10arr.forEach(function(item,index,array){
/* ... */
})
//源码仿写
Array.prototype.forEach = function (func) {
var arr = this;
for(var i=0;i<arr.length;i++){
func(arr[i],i,arr);
}
} - map()
该方法将每个元素使用指定的函数,并返回一个新数组,不改变原数组1
2
3
4
5
6
7
8
9
10
11
12
13var b = arr.map(function(item,index,array){
/* .... */;
return /*处理完的某个值,由这些值组成新的数组*/
})
//源码仿写
Array.prototype.map = function (func) {
var arr = this;
var newArr = [];
for(var i=0;i<arr.length;i++){
newArr.push( func(arr[i],i,arr) );
}
return newArr;
} - filter()
该方法就是它的意思,过滤,把每一个元素进行判断,返回true或false,最后生成一个新的数组1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16arr.filter(function (item,index,arr){
/* ... */
return ;//返回true,保留,反之,删除
})//最后会返回一个新数组
//源码仿写
Array.prototype.forEach = function (func) {
var arr = this;
var newArr = [];
for(var i=0;i<arr.length;i++){
if(func(arr[i],i,arr)){
newArr.push(arr[i]);
}
}
return newArr;
} - every()和some()
这两个方法,一个是判断每一个,一个是判断存在一个就行,也就是说every针对所有,必须所有都满足才为true,而some是存在一个就行就返回true;并且,some在遇到第一个true时就结束遍历;every在遇到第一个false时结束遍历1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27arr.some(function (item,index,arr){
/* ... */
return ;
})//最后会返回true或false;
arr.every(function (item,index,arr){
/* ... */
return ;
})//最后会返回true或false;
//源码仿写
Array.prototype.some = function (func) {
var arr = this;
for(var i=0;i<arr.length;i++){
if(func(arr[i],i,arr)){
return true;
}
}
return false;
}
Array.prototype.some = function (func) {
var arr = this;
for(var i=0;i<arr.length;i++){
if(!func(arr[i],i,arr)){
return false;
}
}
return true;
} - reduce()和reduceRight()
使用指定的函数将数组元素进行组合,生成单一值运行过程是把第二个参数和数组中的第一个元素传入函数,分别对应xy,并把返回值作为下一个的x,y为下一个元素,如果没有第二个参数的话,会把第一个元素当做x,第二个元素为y,进行以上的运算1
2var a = [1,2,3,4];
var sum = a.reduce(function(x,y){return x+y},0); // 求和
reduce()和reduceRight()的区别是,以上的运行过程,reduceRight则完全相反,第一个y为最后一个元素 - indexOf()和lastIndexOf()
indexOf 从前向后查找数组中是否含有给定的元素,返回找到的第一个元素的索引值,没有的话返回-1;lastIndexOf与indexOf的查找顺序相反,需要注意的是字符串也有该方法,并且用法一样