js模拟实现Array的Map、Every、Some、Reduce、Find方法

Array.prototype.myMap = function(callback){
  var newArr = []
  for(var i = 0; i<this.length; i++) {  // this 是arr
    // 当前循环的元素放到自定义的函数中 进行运行并且 吧返回的结果放到新数组的对应索引
    newArr[i] = callback(this[i], i, this) // this[i]是当前的元素  i是当前的索引  
    console.log('callback', newArr)
  }
  return newArr  // 吧新的arr返回
}
// var arr = ["a","b","c","d","e"];
// var x = arr.myMap((value,index,arr) => {
//   if (value === 'a') {
//     return 'dd'
//   }
//   return value
// })

// console.log('x', x)


Array.prototype.myEvery = function(callback){
  var falg = true  // 设置一个flag 只有一个是false就改为false
  if (this.length === 0) {
    // console.log('this', this) // 如果为空就直接返回true
    return true
  }
  for(var i = 0; i<this.length; i++) {  // this 是arr
    var every = callback(this[i])
    if (!every) { // 如果在自定义函数中有返回值为false 的就直接返回
      falg = false
      return false
    }
  }
  if (falg) { // falg为false就是不返回true  falg为true就是说明都是符合要求就直接返回true 
    return true
  } 
}

// var arr = [32, 33, 88, 40];
// var x = arr.myEvery((age) => {
//   return age >= 88;
// })
// console.log('x', x)


Array.prototype.mySome = function(callback){
  var falg = false  // 设置一个flag 只有一个是true就改为true
  if (this.length === 0) {
    // console.log('this', this) // 如果为空就直接返回true
    return true
  }
  for(var i = 0; i<this.length; i++) {  // this 是arr
    var every = callback(this[i])
    if (every) { // 如果在自定义函数中有返回值为true 的就直接返回
      falg = true
      return true
    }
  }
  if (!falg) { // falg为true就是说明都是不符合要求的
    return false
  } 
}

// var arr = [32, 33, 7, 40];
// var x = arr.mySome((age) => {
//   console.log('age', age)
//   return age >= 88;
// })
// console.log('x', x)


Array.prototype.myReduce = function(callback){
  if (this.length === 0) {
    // console.log('this', this) // 如果为空就直接返回true
    return true
  }
  var total = 0
  for(var i = 0; i<this.length; i++) {  // this 是arr
    var total = callback(total ,this[i])
  }
  return total
}

// var numbers = [65, 44, 12, 4];
// var x = numbers.myReduce((total, num) => {
//   console.log(total, num)
//   return total + num;
// })
// console.log('x', x)


Array.prototype.myFind = function(callback){
  var falg = false  // 设置一个flag 只有一个是true就改为true
  if (this.length === 0) {
    // console.log('this', this) // 如果为空就直接返回true
    return true
  }
  for(var i = 0; i<this.length; i++) {  // this 是arr
    var every = callback(this[i])
    if (every) { // 如果在自定义函数中有返回值为true 的就直接返回当前元素
      falg = true
      return this[i]
    }
  }
  if (!falg) { // falg为true就是说明都是不符合要求的
    return -1
  } 
}

var arr = [32, 33, 88, 40];
var x = arr.myFind((age) => {
  return age >= 33;
})
console.log('x', x)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值