reduce

481 阅读1分钟

[...document.getElementsByTagName("*")].map(i => i.tagName)

const arr2 = [1, 2, 3, 4]

arr2.reduce((obj, a) => { console.log(obj, 'obj') console.log(a, 'a') return obj })

打印结果:

1 'obj' 2 'a' 1 'obj' 3 'a' 1 'obj' 4 'a'

const arr2 = [1, 2, 3, 4] arr2.reduce((obj, a) => { console.log(obj, 'obj') console.log(a, 'a') return obj }, 0)

打印结果:

0 'obj' 1 'a' 0 'obj' 2 'a' 0 'obj' 3 'a' 0 'obj' 4 'a'

由此可以得出当reduce方法第二个参数没设置的时候,会用数组第一个值作为回掉函数第一个参数的默认值,然后从数组的第二个参数开始循环,等于说是少循环一次。

利用reduce方法统计数组每个元素的出现频率:

const arr = ['AAA', 'BBB', 'CCCC', 'DDD', 'SSS', 'SSS', 'AAA', 'RRR'] const result = arr.reduce((obj, a) => { obj[a] = obj[a] ? obj[a] + 1 : 1; return obj }, {})

// result = { AAA: 2, BBB: 1, CCCC: 1, DDD: 1, SSS: 2, RRR: 1 }

利用reduce方法去重: const newArr = arr.reduce((pre,cur)=>{ if(!pre.includes(cur)){ return pre.concat(cur) }else{ return pre } },[])

// newArr = [ 'AAA', 'BBB', 'CCCC', 'DDD', 'SSS', 'RRR' ];