蓝桥杯前端Web赛道-寻找小狼人

蓝桥杯前端Web赛道-寻找小狼人

题目链接:0寻找小狼人 - 蓝桥云课 (lanqiao.cn)

题目要求:

蓝桥杯前端Web赛道-寻找小狼人_第1张图片

其实通过题目要求以及题目中提供的gif可知,该题就是需要我们手动写出能够代替filter函数的函数

我们先分析题目给出的代码:

        let newcardList = cardList.myarray(
          (item) => item.category == "werewolf"
        );

在84行左右提供了这样一段代码

回忆一下原先filter函数是怎么使用的

const words = ['spray', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter((word) => word.length > 6);

filter的括号里提供的是一个回调函数,这个回调函数会返回true或者false 然后再通过一些逻辑,真正完成过滤的要求

根据提供的代码对比,我们就能知道

 (item) => item.category == "werewolf"

以上代码就是条件,满足这个条件就会返回true 否则 则是false

由于filter函数返回的是一个新数组,所以我们还需要在内部定义一个新数组

// 返回条件为真的新数组
Array.prototype.myarray = function (cb) {
  // TODO:待补充代码
    let arr = []
};

题目中的cb就是这个新数组应该满足的条件,我们可以通过这个回调函数的特性来进行过滤。

首先我们需要把数组的每一项进行遍历

Array.prototype.myarray = function (cb) {
  // TODO:待补充代码
   let arr = []
  this.forEach((item,index)=>{
  })
};

这个地方为什么使用this呢,因为谁调用这个myarray函数那么this就指向谁

题目中调用myarray函数的是cardList这个数组,于是此时的this,其实就是cardList

然后我们利用回调函数进行判断,最后返回新的数组

// 返回条件为真的新数组
Array.prototype.myarray = function (cb) {
  // TODO:待补充代码

  let arr = []
  this.forEach((item,index)=>{
    if(cb(this[index])){
      arr.push(item)
    }
  })
  return  arr;
};

这里的

if(cb(this[index])){
    arr.push(item)
}

意思就是,传入当前元素到cb里,如果cb返回true则证明当前元素满足要求,将当前元素添加到结果数组arr

至此完成本题要求

你可能感兴趣的:(蓝桥杯,蓝桥杯,前端,职场和发展)