forEach
forEach可以对数组中的每一项循环遍历, 但是并不会改变原有数组。
map 如何返回一个新的数组
map的原型函数所做的事,
- 遍历原有数组所有的元素
- 将每个元素的预期值塞到新的数组中去
Array.prototype.map = function(callback){
var result = [];
this.forEach(element, index){
result.push(callback(element, index));
}
return result;
}
fliter 是如何过滤出期望的数组
- 遍历原有数组的每个元素
- 如果符合条件,则添加到新的数组中
Array.prototype.filter = function(callback){
var result = [];
this.forEach(element, index){
if(callback(element, index)){
result.push(element);
}
}
return result;
}
concatAll
以上讲的都是一维数组,但是有时我们会遇到二维数组, 比如需要在二维数组中找到找到符合条件的需要调用两次forEach就比较麻烦, 我们可以用低阶的方法实现。
concatAll所做的事就是把二维数组转换为一位数组。
Array.prototype.concatAll = function(){
var result = [];
this.forEach((array) => {
result.push.apply(result, array);
});
return result;
}
concatAll是rxjs语法, 如果想直接用js实现二维转一维, 可以使用下面这种方法。
var arr1 = [[1,2],[3,4]];
var arr2 = [].concat.apply([], arr1);