// https://www.jianshu.com/p/e375ba1cfc47
// arr.reduce(callback, initValue)
// 使用arr.concat()和 使用arr.push()来操作一个数组,有什么区别?
// 返回值的区别
// 没有设置初始值,index从下标索引为1的位置开始
// const arr = [1, 2, 3, 4]
// const num = arr.reduce((pre, cur, index, arr)=> {
// console.log(pre, cur, index, arr)
// return pre + cur
// })
// console.log(num)
// 设置初始值,index下标索引从0开始,pre初始值为设置的initValue值
// const arr = [1, 2, 3, 4]
// const num = arr.reduce((pre, cur, index, arr) => {
// console.log(pre, cur, index, arr)
// return pre + cur
// }, 0)
// console.log(num)
// const arr = [1, 2, 3, 4]
// 数组的reduce方法的应用
// 求和
// const num = arr.reduce((pre, cur) => {
// return pre + cur
// }, 0)
// console.log(num)
// 求积
// const num = arr.reduce((pre, cur) => {
// return pre*cur
// }, 1)
// console.log(num)
// 统计数组中元素出现的次数
// const arr = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']
// const obj = arr.reduce((pre, cur) => {
// if (pre.hasOwnProperty(cur)) {
// pre[cur]++
// } else {
// pre[cur] = 1
// }
// // 回调函数每执行一次都要把pre的值给返回
// return pre
// }, {})
// console.log(obj)
// 去除数组中重复的元素
// const arr = [1,2,3,4,4,1]
// const newArr = arr.reduce((pre, cur) => {
// if (!pre.includes(cur)) {
// return pre.concat(cur)
// } else {
// return pre
// }
// }, [])
// console.log(newArr)
// 将二维数组转换成一维数组
// const arr = [[0, 1], [2, 3], [4, 5]]
// const newArr = arr.reduce((pre, cur) => {
// return pre.concat(cur)
// }, [])
// console.log(newArr)
// 将多维数组转换成一维数组
// function parseArr(arr) {
// return arr.reduce((pre, cur) => {
// return pre.concat(Array.isArray(cur) ? parseArr(cur) : cur)
// }, [])
// }
// const arr = [[0, 1], [2, 3], [4,[5,6,7]]]
// console.log(parseArr(arr))
// 对象里的属性求和
// const result = [
// {
// subject: 'math',
// score: 10
// },
// {
// subject: 'chinese',
// score: 20
// },
// {
// subject: 'english',
// score: 30
// }
// ]
// const sum = result.reduce((pre, cur) => {
// return pre + cur.score
// }, 0)
// console.log(sum)
console