reduce的一些用法

150 阅读1分钟

reduce的一些用法

  1. 类似于下面数组中给每一个对象中增加一个 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)
  1. 多维数组扁平 结合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))
  1. 数组分块

根据传入限制大小,对数组进行分块。 小于限制长度时就往里添加,否则直接将其加入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 = [123456];
console.log(chunk(arr4, 3));
  1. 字符统计

统计文本中各个字的数量

    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… 来源