js forEach、map、filter、every、some 方法的深刻理解

目录

一、概述

二、迭代方法

1、filter()

2、map() 方法

3、forEach() 方法

4、every() 和 some()方法

三、手写 filter()、forEach()、map()、every() 和 some() 方法都属于迭代方法——(中高级前端面试题)★★★★★

1、filter()

2、forEach()

3、map()

4、every()

5、some()


参考:https://blog.csdn.net/mChales_Liu/article/details/103201171#13%E3%80%81%E8%BF%AD%E4%BB%A3%E6%96%B9%E6%B3%95

 

一、概述

filter()、forEach()、map()、every() 和 some() 方法都属于迭代方法。

  • 每个方法都接收2个参数:要在每一项上运行的函数 和 (可选的)运行函数的作用域对象——影响 this 的值。
  • 传入这些方法中的函数会接收3个参数:数组项的值、该项在数组中的位置 和 数组对象本身。
  • IE8及以下版本的浏览器不支持这些方法。


二、迭代方法

1、filter()

  • filter() 方法使用指定的函数测试数组中所有的项,并创建一个包含所有通过测试的项的新数组,如果都没通过就返回一个空数组。
  • filter() 方法不会对空数组进行检测。
  • filter() 方法不改变原数组。
let numArr = [1,2,3,4,5,4,3,2,1];
let filterResult1 = numArr.filter((item, index)=>{
    return item<3;
})
console.log(filterResult1);                 // [1, 2, 2, 1]

2、map() 方法

  • map() 方法使用指定的函数测试数组中所有的元素,并返回每次函数调用的结果组成的新数组。
  • map() 不会对空数组进行检测。
  • map() 方法不改变原数组。
let numArr = [1,2,3,4,5,4,3,2,1];
let mapResult1 = numArr.map((item, index)=>{
    return item * 2;
})
console.log(mapResult1);                 //  [2, 4, 6, 8, 10, 8, 6, 4, 2]

3、forEach() 方法

  • forEach() 方法使用指定的函数测试数组中所有的元素,没有返回值。
  • forEach() 方法本质上与for循环迭代数组一样。
let numArr = [1,2,3,4,5,4,3,2,1];
numArr.forEach((item, index)=>{
    // 对数组的一些操作
})

4、every() 和 some()方法

every() 和 some()方法都用于检查数组中的项是否满足某个条件:

  • every() 方法使用指定的函数测试数组中所有的项,在数组的所有项都满足该条件时,才返回true,否则返回false;
  • some() 方法使用指定的函数测试数组中所有的项,只要数组中有一项满足条件,就返回true,都不满足才返回false。
// every() 方法​
let numArr = [1,2,3,4,5,4,3,2,1];
let everyResult1 = numArr.every((item, index)=>{
    return item>0;
})
let everyResult2 = numArr.every((item, index)=>{
    return item>2;
})
console.log(everyResult1);             // true
console.log(everyResult2);             // false
 
 
// some() 方法
let numArr = [1,2,3,4,5,4,3,2,1];
let someResult1 = numArr.some((item, index)=>{
    return item<0;
})
let someResult2 = numArr.some((item, index)=>{
    return item<2;
})
console.log(someResult1);              // false
console.log(someResult2);              // false


三、手写 filter()、forEach()、map()、every() 和 some() 方法都属于迭代方法——(中高级前端面试题)★★★★★

1、filter()

Array.prototype.filter = function(fn){
	if(typeof fn !== "function"){
		throw "参数必须为函数"
	}
	// 获取要迭代的数组
	let arr = this;
	if(!Array.isArray(arr)){
		throw "只能对数组使用forEach方法"
	}
	let result = [];
	for(let index=0;index

2、forEach()

Array.prototype.myForEach= function(fn){
    // 获取要迭代的数组
    let arr = this;
    for(let i=0; i

3、map()

Array.prototype.myMap = function(fn){
let newArr = [];
let arr = this;
for (let i=0; i{
    return item * 2;
})
console.log(mapResult);                 //  [2, 4, 6, 8, 10, 8, 6, 4, 2]

4、every()

Array.prototype.myEvery= function(fn){
	// 获取要迭代的数组
	let arr = this;
	for(let index=0;index

5、some()

Array.prototype.mySome= function(fn){
	let arr = this;
	for(let index=0;index

 

你可能感兴趣的:(#,JavaScript)