- 语法基础
- 累加器
- 多维数组扁平化
- 数组分块
- 字符统计
reduce基础语法
let value = arr.reduce(function(previousValue, item, index, array) {
// ...
}, [initial]);
/*
参数说明:
previousValue: 上一次的调用结果:
initial不存在则第一次previousValue为第一个元素,index为1(从第二个元素开始循环)
initial存在,index为0(从第一个元素开始循环),previousValue默认为initial的值
item:元素
index:索引
array:当前数组
*/
累加器:
const arr=[2,3,4,5,6,11]
const sum=arr.reduce((previousValue,item)=>{
return previousValue+item
},0)
console.log(sum)//31
多维数组扁平化:
多维数组转一维数组
const arr1 = [123, 6, [2, [1, 0, [1111, 2222]], 3, 5]]
function multiDimensionalToOneDimensional(array) {
return array.reduce((previousValue, item) => {
return Array.isArray(item) ? previousValue.concat(multiDimensionalToOneDimensional(item)) : previousValue.concat(item)
}, [])
}
console.log(multiDimensionalToOneDimensional(arr1))
//[ 123,6,2,1,0,1111,2222,3,5]
数组分块:
根据指定的大小对数组进行分块,分成固定大小的二维数组
const arr3=[2,3,4,5,6,78,9,0,4,1,3,45,6,89,0]
function divisionArray(array,size){
return array.reduce((previousValue, item) => {
//previousValue.length确定当前是处在数组中的第几个元素
if(previousValue[previousValue.length-1].length<size){//只要这个元素的数组数量小于规定值就可以继续向里面添加元素
previousValue[previousValue.length-1].push(item)
}else{//如果这个元素的数组已经满了,则在记录数组中push进去一个新数组并把当前的元素放入其中
previousValue.push([item])
}
return previousValue
},[[]])
}
console.log(divisionArray(arr3,3))
// [ [ 2, 3, 4 ], [ 5, 6, 78 ], [ 9, 0, 4 ], [ 1, 3, 45 ], [ 6, 89, 0 ] ]
字符统计:
统计文本中每个字的数量,以对象的形式输出
const text='今天天气真的很好呀!'
function wordCount(text){
return text.split('').reduce((previousValue, item)=>{
if(previousValue[item]){
previousValue[item]+=1
}else{
previousValue[item]=1
}
return previousValue
},{})
}
console.log(wordCount(text))
/*
{
'今': 1,
'天': 2,
'气': 1,
'真': 1,
'的': 1,
'很': 1,
'好': 1,
'呀': 1,
'!': 1
}
*/
这里是引用学习
“高级前端进阶”
公众号内容后,把自己的代码和理解进行汇总。