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

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

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

题目要求:

在这里插入图片描述

其实通过题目要求以及题目中提供的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

至此完成本题要求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值