filter是通过生成 True 和 False 组成的迭代器将可迭代对象中不符合条件的元素过滤掉;

它会执行你所传入的回调函数,每次给回调函数传入一个参数,如果回调函数的执行结果为true,就将这个值存储到filter内部所创建的数组中,最终将数组返回

// 需求:最终返回大于100的值
      let arr = [12, 4, 324, 23, 4, 35, 34, 534, 5]
       Array.prototype.myfilter = function(callback) {
        // 定义一个内部数组
        let temp = []
         // 业务处理--过滤处理
        for (let i = 0; i < arr.length; i++) {
          // 执行回调函数,将当前遍历到的元素传递给回调函数,如果回调函数的返回结果为true,就将当前元素存储到temp
          let res = callback(arr[i]) // true/false
          if(res){ // 为true,说明这个值我要保留,那么应该添加到temp数组中
              temp.push(arr[i])
          }
        }

        // 将数组返回
        return temp
      }
      let temp = arr.myfilter(function(value){
        return value > 100
      })
      console.log(temp);

map返回的则是 True 和 False 组成的迭代器
可以传入回调,每一次遍历执行回调函数,为回调函数传入当前遍历到的元素,将回调函数的执行结果存储到数组中,最终将返回,一般 实现数据加工处理可以使用map

	let arr = [12, 3, 213, 23, 4, 234, 45]
	 // callback:回调函数
      Array.prototype.mymap = function(callback) {
        // 有一个内部数组
        let temp = []
        // 执行回调函数,将回调函数的结果存储到内部数组中
        for (let i = 0; i < arr.length; i++) {
          let res = callback(arr[i])
          temp.push(res)
        }

        // 将内部数组返回
        return temp
      }

      let fn = function(value, index) {
        return value * 3 + 5
      }
      let temp = arr.mymap(fn)
      console.log(temp)

相同点:filter 和 map 都是对数组的操作,均返回一个新的数组
不同点:filter是满足条件的留下,是对原数组的过滤;map则是对原数组的加工,映射成一对一映射的新数组

希望以上内容可以对你有所帮助!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐