<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>reduce</title>
</head>
<body>
<script>
// 求和、求积
var arr = [1,2,3,4,5]
var sum = arr.reduce(function(prev,cur,index){
console.log(prev,cur,index);
return prev + cur
})
console.log(sum);
// prev 表示上一次调用回调函数的返回值或者初始值init 如果没有初始值则是数组第一项
// cur 表示当前正在处理的数组元素
// index 表示当前正在处理的数组元素的索引 若提供init 则索引为0 否则为1
// init 表示初始值
// 求数组中各项出现的次数 用对象表示出来
let names=[‘Alice’,’Bob’,’Tiff’,’Alice’]
// {‘Alice’:2,’Bob’:1,’Tiff’:1}
var obj = names.reduce(function(prev,cur,index){
console.log(prev,cur)
// 判断对象里是否有属性
if(cur in prev){
prev[cur]++
}else{
prev[cur] = 1
}
return prev
},{})
console.log(obj);
// 数组去重
var arr = [1,2,3,4,5,4,1]
// 第一步 需不需要init值
var newArr = arr.reduce(function(prev,cur,index){
// if(!prev.includes(cur)){
// return prev.concat(cur)
// }else{
// return prev
// }
if(!prev.includes(cur)){
return prev.concat(cur)
}else{
return prev
}
},[])
console.log(newArr);
// 二维数组转为一维数组
let arr1 = [[0,1],[2,3],[4,5]]
let newArr1 = arr1.reduce((pre,cur)=>{
return pre.concat(cur)
},[])
console.log(newArr1);
// 多维数组转为一维数组
let arr2 = [[0,1],[2,3],[4,5,[6,7]]]
const getArr = function(arr) {
return arr.reduce((pre,cur)=> pre.concat(Array.isArray(cur)? getArr(cur):cur)
,[])
}
console.log(getArr(arr2));
// 对象中属性求和
var result = [
{
subject:’math’,
score:10
},
{
subject:’chinese’,
score:10
},
{
subject:’english’,
score:10
}
]
var scoreSum = result.reduce(function(prev,cur,index){
return prev+cur.score
},0)
console.log(scoreSum);
</script>
</body>
</html>