一些之前掌握的东西,一段时间不用,还是会忘啊,所以还是要勤于总结,回顾,多敲几次,多看几遍,加深理解,做到真正的掌握(给自己来针大管鸡血,哈哈哈)
!!! reduce的用法
reduce()方法里边,有两部分,第一是个回调函数,第二个参数是设置的初始值。
回调函数中可以有四个参数,第一个参数是上一次回调返回的值,或者设置的初始值,第二个参数是当前被处理的项,第三个参数是当前被处理项的索引值,第四项是原数组,一般使用前两个参数,后俩可以省略
下面举例看一下,reduce的使用场景
- 第一种,用于累加求和
// 1.一组数求和
let total = [1, 2, 3, 4, 5].reduce((acc, cur) => acc + cur, 0)
// 2.数组对象种某一个参数累加
let total = [{id: 1}, {id: 2}, {id: 3}].reduce((acc, cur) => acc + cur.id, 0)
- 第二种,把二维数组变一维数组
let flattened = [[1, 2],[3, 4],[5, 6]].reduce((acc, cur) => acc.concat(cur), [])
console.log(flattened) // 【1,2,3,4,5,6]
- 第三种,计算每个元素出现的次数
const names = ['Alice', 'Bob', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let countedNames = names.reduce((allnames, name) => {
name in allnames ? allnames[name]++ : allnames[name] = 1
return allnames
}, {})
console.log(countedNames)
- 数组去重
先看下简单数组
let arr = [0, 1, 2, 3, 4, 4, 1]
let newarr = arr.reduce((acc, cur) => {
return acc.includes(cur) ? acc : acc.concat(cur)
}, [])
console.log(newarr)
延伸一下,比如数组对象,根据每一项中的某个参数去重,
下面封装了一个方法,用于数组去重,大家可以看下
let arr = [0, 1, 2, 3, 4, 4, 1]
let objarr = [{
ids: 1,
names: '张三'
}, {
ids: 2,
names: '李四'
}, {
ids: 2,
names: '李四'
}, {
ids: 3,
names: '王五'
}, {
ids: 4,
names: '刘六'
}, {
ids: 5,
names: '白七'
}]
// 数组去重
function removeDuplicats(ary, key) {
if (ary.length === 0) return ary
if (key) {
let obj = {}
let newArr = ary.reduce((acc, cur) => {
obj[cur[key]] ? '' : (obj[cur[key]] = true && acc.push(cur))
return acc
}, [])
return newArr
} else {
return Array.from(new Set(ary))
}
}
console.log('简单数组', removeDuplicats(arr))
console.log('对象数组', removeDuplicats(objarr, 'ids'))
嗯,暂时就是这些,技术有限,欢迎各位大佬指教评论。。。。