js使用reduce实现map

js使用reduce实现map

先介绍一下 reduce 方法

reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。

参数:

  • 1.callback:回调函数,有四个参数

  • (1) accumulator:累计器,累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(见于下方)。

    (2) currentValue:当前值

    (3) index:可选,当前项的索引号,如果指定了 initialValue,则从 0 开始,否则从 1 开始

    (4) array:可选,调用reduce()的数组

  • 2.initialValue:可选,作为第一次调用callback 函数时的accumulator 的值,如果没有提供此参数,则数组的第一个元素作为 第一次调用callback 函数时的accumulator 的值

使用 reduce 简易的实现一个 map

// reduce 实现map
Array.prototype.__map = function (fn, thisArg) {
  return this.reduce((acc, cur, index,array) => {
    acc[index] = fn.call(thisArg, cur,index,array)
    return acc
  }, [])
}
results = crr.__map((item, index, array) => {
  return item +index
})
console.log('results-__map',results)

同上,使用forEach

Array.prototype._map = function (fn, thisArg) {
  const arr = []
  this.forEach((item,index, array) => {
    arr[index] = fn.call(thisArg, item,index,array)
  })
  return arr
}
const crr = [1,2,3,4,5]
results = crr._map((item, index,array) => {
  return item + index
})
console.log('results-_map',results)

使用 reduce 实现数组求和

const arr = [1,2,3,4,5,6]
const reducer = (previousValue, currentValue) => previousValue + currentValue;
const res = arr.reduce(reducer)
console.log('res',res)

将二维数组改成一维数组

const twoArr = [[1,2],[3,4],[5,6]]
const oneArr = twoArr.reduce((acc,cur) => {
  return [...acc,...cur]
})
console.log('oneArr',oneArr)

计算数组中每个元素出现的次数

const testArr = [1,4,2,2,1,5,5,7,1]
const o = testArr.reduce((acc,cur) => {
  if (acc[cur]) {
    acc[cur] += 1
  } else {
    acc[cur] = 1
  }
  return acc
}, {})
console.log('o',o)

按属性对object分类

const people = [
  {name: '1', age: 10},
  {name: '2', age: 10},
  {name: '3', age: 12},
  {name: '4', age: 12},
  {name: '5', age: 16},
  {name: '6', age: 12},
]

const o1 = people.reduce((acc, cur) => {
  if (acc[cur.age]) {
    acc[cur.age].push(cur)
  } else {
    acc[cur.age] = [cur]
  }
  return acc
}, {})
console.log('o1',o1)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值