简单手写forEach等6个循环函数

1.forEach

Array.prototype.newForEach = function (callback) {
  for (let i = 0; i < this.length; i++) {
    callback(this[i], i, this)
  }
}

问:为什么return不能跳出整个循环

答:return可以跳出当前callback,, 而不能跳出整个for循环,类似for里面的continue


let arr = ['杰', '杰你', '哥们']
arr.newForEach(item => {
  if (item == '杰你') {
    return
  }
  console.log(item);
})

问:那怎么跳出整个循环?

答:try catch

let arr = ['杰', '杰你', '哥们']
try {
  arr.newForEach(item => {
    if (item == '杰你') {
      throw '错误'
    }
    console.log(item);
  })
} catch (error) {
  console.log(error);
}

 

2.map

let arr = [{ name: '小白', age: 19 }, { name: '小宏', age: 17 }]
Array.prototype.newMap = function (callback) {
  // 返回一个处理后的数组
  let res = []
  for (let i = 0; i < this.length; i++) {
    res.push(callback(this[i], i, this))
  }
  return res
}
let newArr = arr.newMap(item => {
  //返回处理的内容
  return `${item.name}今年${item.age}`
})
console.log(newArr);

 

3.filter

Array.prototype.newFilter = function (callback) {
  let res = []
  for (let i = 0; i < this.length; i++) {
    callback(this[i], i, this) && res.push(this[i])
  }
  return res
}
let arr = [1, 2, 3, 4, 5]
let newArr = arr.newFilter(item => {
  return item > 3
})
console.log(newArr);

4.every

Array.prototype.newEvery = function (callback) {
  for (let i = 0; i < this.length; i++) {
    //循环,如果有一个false就返回false
    if (!callback(this[i], i, this)) return false
    return true
  }
}
let arr = [1, 2, 3, 4, 5]
let res = arr.newEvery(item => {
  return item > 0
})
console.log(res);

5.some

Array.prototype.newSome = function (callback) {
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) return true
  }
  return false
}
let arr = [1, 2, 3, 4, 5]
let res = arr.newSome(item => {
  return item > 14
})
console.log(res);

6.find

Array.prototype.newFInd = function (callback) {
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) {
      return this[i]
    }
  }
  return '未找到'//原版是undefined
}
let arr = [{ id: 1, name: "小编" }, { id: 2, name: "小百" }]
let res = arr.newFInd(item => {
  return item.id == 21
})
console.log(res);

7.findIndex

Array.prototype.newFindIndex = function (callback) {
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) {
      return i //如果找到返回当前索引
    }
  }
  return '找不到索引'//原版是-1
}
let arr = [{ id: 11, name: "小编" }, { id: 2, name: "小百" }]
let res = arr.newFindIndex(item => {
  return item.id == 2
})
console.log(res);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值