// 用法: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