reduce的一些用法
-
类似于下面数组中给每一个对象中增加一个 ID 属性 结合递归进行
var treeData=[
{
label: 'aaa',
children: [
{
label: 'bbb'
},
{
label: 'ccc'
},
{
label: 'ddd'
}
]
}
]
function setID(arr,start=1){
return arr.reduce((id,currentObj) => {
currentObj.id = id++; // 先赋值再 ++
return Array.isArray(currentObj.children) ? setID(currentObj.children,id) : id
},start)
}
setId(treeData)
console.log(treeData)
-
多维数组扁平 结合concat和递归进行
const arr3 = [
[1,2],
[3,4],
[5,6,[7,8,[9,10],] ]
]
const flattenArr = arr3 =>
arr3.reduce((pre,current) => pre.concat(Array.isArray(current) ? flattenArr(current) : cur) ,[])
console.log(flattenArr(arr3))
-
数组分块
根据传入限制大小,对数组进行分块。 小于限制长度时就往里添加,否则直接将其加入
res
const chunk = (arr, size) => {
return arr.reduce(
(res, cur) => (
res[res.length - 1].length < size ? res[res.length - 1].push(cur) : res.push([cur]),
res
),
[[]]
);
};
const arr4 = [1, 2, 3, 4, 5, 6];
console.log(chunk(arr4, 3));
-
字符统计
统计文本中各个字的数量
function getAppearTimes(strText) {
const textArr = strText.split("")
return textArr.reduce((numWords,cur) =>{
numWords[cur] = (numWords[cur] || 0 ) + 1
return numWords
},{})
}
const str = '每天摸鱼,每天快乐!'
console.log(getAppearTimes(str)) // {每: 2, 天: 2, 摸: 1, 鱼: 1, ,: 1, !: 1, ,: 1}
纯粹为了记录,mp.weixin.qq.com/s/Xh70ccMMt… 来源