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)
版权声明:本文为m0_46430338原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。