有关数组的迭代方法every(),some(),filter(),map(),forEach()
- 迭代方法的共同点是:都是对数组中的每一元素运行给定的函数来或判断返回结果或遍历元素(特指forEach方法)
- every()和some()可以对比使用
2-1:arr.every()是判断数组中的元素是否都满足给定的条件,全部满足才会返回true;而arr.some()则是判断数组中是否有元素满足给定的条件,只要有一个元素满足即返回true;
2-2:arr.every()的使用和封装,如下
var arr = [12, 45, 23, 25, 28, 20];
/* var result = arr.every(function (item, index, arr) {
console.log(item, index, arr, '------'); // 12 0 [ 12, 45, 23, 25, 28, 20 ] ------
//item-->是数组中的每一个元素
//index-->是数组中每一个元素的下标
//arr-->数组
return item >= 12;
});
console.log(result); */
Array.prototype.myEvery = function(fun,thisObj){
let result = true
for(var i=0;i<this.length;i++){
var res = fun.call(thisObj,this[i],i,this);
if(!res){
result = res;
break;
}
}
return result
}
var result = arr.myEvery(function (item, index, arr) {
return item >= 12;
});
console.log(result);
2-3:同样的,arr.some()的使用和封装,和every很是相似,如下
var arr = [12, 45, 23, 25, 28, 20];
/* var result = arr.some(function (item, index, arr) {
return item >= 47;
});
console.log(result); // false
*/
Array.prototype.mySome = function(fun,thisObj){
let result = false
for(var i=0;i<this.length;i++){
var res = fun.call(thisObj,this[i],i,this);
if(res){
result = true;
break;
}
}
return result
}
var result = arr.mySome(function (item, index, arr) {
return item >= 47;
});
console.log(result);
- arr.filter() 数组过滤,返回的是满足给定条件的元素组成的数组,也要一个封装,如下:
var arr = [12, 45, 23, 25, 28, 20];
/* var result = arr.filter(function(item,index,arr){
return item>23;
});
console.log(result); // [ 45, 25, 28 ] */
Array.prototype.myFilter = function(fun,thisObj){
let result = false
let temp = []
for(var i=0;i<this.length;i++){
var res = fun.call(thisObj,this[i],i,this);
if(res){
result = true;
temp.push(this[i])
}
}
return temp
}
var result = arr.myFilter(function (item, index, arr) {
return item > 23;
});
console.log(result);
- arr.map() 数组的映射,返回每次函数调用的结果组成的数组/映射数组内元素的内容,返回新数组,更加简单直白的说就是返回对数组内的同一元素执行一样的操作而得到的新结果;方法封装和前面三个都很相似,就简单的看一下运行的结果,如下:
var arr = [12, 45, 23, 25, 28, 20];
var result = arr.map(function(item,index,arr){
return item*2;
});
console.log(result); // [ 24, 90, 46, 50, 56, 40 ]
console.log(arr); // [ 12, 45, 23, 25, 28, 20 ]
- map() 也就可以获取数组中对象的指定属性的值所组成的数组,用点方法,如下:
var stus = [{
name:'tom',
age:12
},{
name:'lisi',
age:20
},{
name:'larry',
age:17
}];
//获取该数组内的所有人的名字
var result = stus.map(function(item){
return item.name;
});
console.log(result); // [ 'tom', 'lisi', 'larry' ]
- arr.forEach() 数组的遍历,注意它没有返回值,就是遍历数组,将它遍历出来,拿到数组的每一项
var stus = [{
name:'tom',
age:12
},{
name:'lisi',
age:20
},{
name:'larry',
age:17
}];
stus.forEach(function(item,index,arr){
console.log(item);
});
var arr = [12, 45, 23, 25, 28, 20];
arr.forEach(function(item){
console.log(item)
})