ES5中新增了写数组方法,如下:
forEach (js v1.6)
map (js v1.6)
filter (js v1.6)
some (js v1.6)
every (js v1.6)
indexOf (js v1.6)
lastIndexOf (js v1.6)
reduce (js v1.8)
reduceRight (js v1.8)
1) /forEach////
回调函数的参数如下所示。
回调参数 | 定义 |
---|---|
value | 数组元素的值。 |
index | 数组元素的数字索引。 |
array1 | 包含该元素的数组对象。 |
这个。。我觉得不用说了吧= =上代码吧
var a1= [11,22,33];
a1.forEach(function(
value, //当前遍历到的元素值
index, //当前遍历到的元素的索引
array //当前元素所在的数组
){
console.log(value,index,array) ;
// output
// 11 0 [11, 22, 33]
// 18 22 1 [11, 22, 33]
// 18 33 2 [11, 22, 33]
})
使用第三个参数thisArg的例子
var obj = {
hehe:function(value,index){
console.log(value,index,this.pow(value))
},
pow:function(x){
return x*x
}
} ;
var tt = [8, 3, 9, 2];
tt=tt.forEach(obj.hehe,obj);
console.log(tt);
//8 0 64
//3 1 9
//9 2 81
//2 3 4
2) /map /
也是遍历 但是有返回值
下表列出了回调函数参数。
回调参数 | 定义 |
---|---|
value | 数组元素的值。 |
index | 数组元素的数字索引。 |
array1 | 包含该元素的数组对象。 |
var a1= [11,22,33];
a1= a1.map(function(){
return value * 2
})
console.log(a1) //[22, 44, 66]
也可以返回属性
使用第三个参数thisArg的例子
var tt = [5, 8, 3, 10];
var obj = {
a:10 ,
hehe: function(value){
return this.a * value
}
};
tt = tt.map(obj.hehe,obj) ;
console.log(tt);//[50, 80, 30, 100]
使用原生js的例子
var tt = [64, 9, 81, 49];
tt =tt.map(Math.sqrt);
console.log(tt);//[8, 3, 9, 7]
3) /filter /
过滤筛选,
返回过滤后的新数组。
下表列出了回调函数参数。
回调参数 | 定义 |
---|---|
value | 数组元素的值。 |
index | 数组元素的数字索引。 |
array1 | 包含该元素的数组对象。 |
需要返回值 返回true就算通过 如果false就再见啦 上代码
var a1= [11,22,33];
a1 = a1.filter(function(item){
if(item>14){return true }
return false
})
console.log(a1) // [22, 33]
使用第三个参数thisArg的例子
var obj = {
hehe:function(value,index,array){
return this.rr(value) > 50
},
rr:function(x){
return x*10
}
} ;
var tt = [8, 3, 9, 2];
tt=tt.filter(obj.hehe,obj);
console.log(tt); //[8, 9]
4)///some//
some 方法会按升序索引顺序对每个数组元素调用 callbackfn 函数,直到 callbackfn 函数返回 true。 如果找到导致 callbackfn 返回 true 的元素,则 some 方法会立即返回 true。 如果回调不对任何元素返回true,则 some 方法会返回 false。
--------与array.every的区别!! some遍历到true 直接返回true every需要全部true之后才返回true
下表列出了回调函数参数。
回调参数 | 定义 |
---|---|
value | 数组元素的值。 |
index | 数组元素的数字索引。 |
array1 | 包含该元素的数组对象。 |
例子
var aa = [22,33,44,55] ;
function ab(value){
return value == 22
}
if(aa.some(ab)){
console.log(true) //true
}else{
console.log(falses)
};
使用第三个参数thisArg的例子
var aa = [22,33,44,55] ;
var obj={
bb:22 ,
aa:function(value){
return this.bb ==value
}
}
if(aa.some(obj.aa,obj)){
console.log(true) //true
}else{
console.log(falses)
};
3)//every//
every 方法会按升序顺序对每个数组元素调用一次 callbackfn 函数,直到 callbackfn 函数返回 false。 如果找到导致 callbackfn 返回 false 的元素,则 every 方法会立即返回 false。 否则,every 方法返回true。
---------与array.some的区别!! some遍历到true 直接返回true every需要全部true之后才返回true
下表列出了回调函数参数。
回调参数 | 定义 |
---|---|
value | 数组元素的值。 |
index | 数组元素的数字索引。 |
array1 | 包含该元素的数组对象。 |
例子
var aa =[1,2,3,45,6]
var bol=aa.every(function(value){
return value%2 == 0
})
if(bol){
console.log("全是是双数")
}else{
console.log("啊哦有些不是双数") // 啊哦有些不是双数
}
使用和some同样的例子
var aa = [22,33,44,55] ;
function ab(value){
return value == 22
}
if(aa.every(ab)){
console.log(true)
}else{
console.log(false)//false
};
var aa =[1,2,3,45,6];
var obj= {
aa:2,
test:function(value){
return value%this.aa ==0
}
}
var bol=aa.every(obj.test,obj);
if(bol){
console.log("全是是双数")
}else{
console.log("啊哦有些不是双数") // 啊哦有些不是双数
}
5)/ indexOf/
var a = [1,2,3,4,5];
console.log(a.indexOf(3,1)); //2
console.log(a.lastIndexOf(2)) //1
lastIndexOf
var a = [1,2,3,4,5,3,3,5];
var f = a.lastIndexOf(3); //6