SOURCE

// 用法:reduce   arr.reduce((prev,cur,index,arr)=>{},init)
// arr 表示原数组
// prev 表示上一次回调的返回值或者初始值init
// cur  表示当前正在处理的数组元素
// index 表示当前正在处理的数组元素的索引,若提供init值则为0 否则为1
// init 表示初始值

var arr = [1, 2, 31, 124, 12, 12, 2, 1, 2]
// 求和
// var sum = arr.reduce((prev, cur) => { return prev + cur }, 0)
// console.log(sum)
// 因为传了init,所以初始的时候prev是init值为0   index为0 cur为arr【0】

// 求动态和
// var result = []
// arr.reduce((prev, cur) => {
//     result.push(prev + cur)
//     return prev + cur
// }, 0)
// console.log(result)
// 或者使用直接改变数组的方式
// function fn(nums) {
//     const n = nums.length;
//     for (let i = 1; i < n; i++) {
//         nums[i] += nums[i - 1];
//     }
//     return nums;
// }
// fn(arr)
// console.log(arr)

// 求最大值
// console.log(Math.max(...arr))
// 或者采用reduce
// var result = arr.reduce((prev, cur) => {
//     console.log(prev, cur)
//     return Math.max(prev, cur)
// })
// console.log(result)
// 不传值,和传值不太一样,虽然结果是一样的,但运行逻辑不一样,传了0之后,如果里面都是负数,则计算异常
// 不传值 默认prev是arr【0】  cur是arr【1】   传值0  默认prev是0 cur是arr【0】

// 数组去重
// var result = arr.reduce((prev, cur) => {
//     prev.indexOf(cur) === -1 && prev.push(cur)
//     return prev
// }, [])
// console.log(result)

// 获取数组中每一个项出现的次数
// var result = arr.reduce((prev, cur) => {
//     if (prev[cur] >= 1) {
//         prev[cur]++
//     } else {
//         prev[cur] = 1
//     }
//     return prev
// }, {});
// console.log(result);
// 求result中出现次数最多的数字
// let obj = {}
// for (let x in result) {
//     if (Object.keys(obj).length === 0) {
//         obj = { key: x, value: result[x] }
//     } else {
//         if (result.x > obj.x) {
//             obj = { key: x, value: result[x] }
//         }
//     }
// }
// console.log(obj)
// 求result中出现奇数次的整数
// let xxx = []
// for (let x in result) {
//     if (result[x] % 2 === 1) {
//         let obj = {}
//         obj[x] = result[x]
//         xxx.push(obj)
//     }
// }
// console.log(xxx)

// str1='abc'   str2='abcd'  str2中的字符只能使用1次,如果能够凑成str1 就返回true
// function fn(str1, str2) {
//     if (str1.length > str2.length) {
//         return false
//     } else {
//         // 分别将str1和str2 统计成对象的形式 根据出现次数进行判断
//         let str1Arr = str1.split('')
//         let str2Arr = str2.split('')
//         let str1Obj = str1Arr.reduce((prev, cur) => {
//             if (prev[cur] >= 1) {
//                 prev[cur]++
//             } else {
//                 prev[cur] = 1
//             }
//             return prev
//         }, {})
//         let str2Obj = str2Arr.reduce((prev, cur) => {
//             if (prev[cur] >= 1) {
//                 prev[cur]++
//             } else {
//                 prev[cur] = 1
//             }
//             return prev
//         }, {})

//         // 获取str1所有的key
//         let str1Keys = Object.keys(str1Obj)
//         // 声明结果
//         let result = []
//         for (let x = 0; x < str1Keys.length; x++) {
//             let obj = {}
//             obj.key=str1Keys[x]
//             if (Object.prototype.hasOwnProperty.call(str2Obj, str1Keys[0]) && str2Obj[str1Keys[x]] >= str1Obj[str1Keys[x]]) {
//                 obj.value=true
//             } else {
//                 obj.value=false
//             }
//             result.push(obj)
//         }
//         let x=result.every(item=>{return item.value})
//         return x
//     }
// }
// console.log(fn('aaebc', 'abcad'))

// 利用对象的方式去重
// let obj={}
// arr.forEach(item=>{
//     obj[item]=1
// })
// console.log(Object.keys(obj))
console 命令行工具 X clear

                    
>
console