数组的ES5方法(回顾)
- 迭代方法
- forEach
- map
- filter
- some
- every
- 缩减方法
- reduce
- reduceRight
- some,filter和forEach 的区别
迭代方法
注意:ES5 的数组方法均不改变原数组
arr.forEach
(callback(currentValue,index,array), thisArg)
定义:遍历数组中的每一项,返回 undefined
参数1:回调函数
currentValue:当前处理元素的值
index:当前处理元素的索引,可选
array:当前数组,可选
参数2:回调函数的this指向,可选
var arr = [1,2,3];
arr.forEach(function(v,i){console.log(v,i,this)},{a:1});// 1 0 {a:1}
扩展:封装forEach
Array.prototype.myForEach = function (callback, ctx) {ctx = ctx || window;var arr = this;for (var i = 0; i < arr.length; i++) {callback.call(ctx, arr[i], i, arr);}
};
arr.map
(callback(currentValue,index,array), thisArg)
定义:数组映射,返回映射后的新数组
var arr = [1,2,3];
var res = arr.map(function(v,i){ console.log(v,i,this); return v+1 },{a:1});//1 0 {a:1}
console.log(res);//[2,3,4]
扩展:封装map
Array.prototype.myMap = function (callback, ctx) {ctx = ctx || window;var arr = this;var res = [];for (var i = 0; i < arr.length; i++) {res.push(callback.call(ctx, arr[i], i, arr));}return res;
};
arr.filter
(callback(currentValue,index,array), thisArg)
定义:把数组中的不成立项过滤,返回过滤后的新数组
var arr = [1,2,3,4]
var res = arr.filter(function(v,i){console.log(v,i,this); return v%2===0},{a:1})
console.log(res);//[2,4]
扩展:封装filter
Array.prototype.myFilter = function (callback, ctx) {ctx = ctx || window;var arr = this;var res = [];for (var i = 0; i < arr.length; i++) {if (callback.call(ctx, arr[i], i, arr)) {res.push(arr[i]);}}return res;
};
arr.some
(callback(currentValue,index,array), thisArg)
定义:判断数组中有没至少
一项成立,返回布尔值
var arr = [1,2,3]
var res = arr.some((v) => v === 3)
console.log(res);//true
扩展:封装some
Array.prototype.mySome = function (callback, ctx) {ctx = ctx || window;var arr = this;for (var i = 0; i < arr.length; i++) {if (callback.call(ctx, arr[i], i, arr)) {return true;}}return false;
};
arr.every
(callback(currentValue,index,array), thisArg)
定义:判断数组中是否全部项
成立,返回布尔值
var arr = [1,2,3]
var res = arr.every((v) => v === 3)
console.log(res);//false
扩展:封装every
Array.prototype.myEvery = function (callback, ctx) {ctx = ctx || window;var arr = this;for (var i = 0; i < arr.length; i++) {if (!callback.call(ctx, arr[i], i, arr)) {return false;}}return true;
};
缩减方法
arr.reduce
(callback(accumulator, currentValue, index, array), initialValue)
定义:缩减函数,接受一个函数作为累加器,数组每个值从左到右缩姐,返回函数累计处理结果
参数1:回调函数
accumulator:累计器累计回调的返回值
currentValue:当前处理元素的值
index:当前处理元素的索引,可选
array:当前数组,可选
参数2:累计器累计回调的初始值
var arr = [1,2,3]
var res = arr.reduce((sum,v) => sum +v,4);
console.log(res);//10
扩展:封装reduce
Array.prototype.myReduce = function (callback, total) {var arr = this;for (var i = 0; i < arr.length; i++) {total = callback(total, arr[i], i, arr);}return total;
};
some,filter和forEach 的区别
forEach,filter 中,return不会终止迭代
some中,return 会终止迭代
,可用于优化性能
var arr = ["red", "green", "blue", "pink"];
arr.some((v) => {if (v === "green") {console.log(11);return 1;}console.log(v);
});