Array.propertype.reduce用法示例

105 阅读1分钟

看了MDN以后才知道这么多地方可以用到reduce,便在场景下自己实现了一下函数,记录下吧

数组去重虽然面试的时候写了很多,并且实际开发过程中 Set去重用的比较多,reduce的用法以前也不够掌握,终于明白了,开心

const arr2 = [
  [1,2],
  [3,4]
]
const res2 = arr2.reduce((pre, cur) => {
  return [...pre, ...cur]
}, [])
console.log(res2);
/**
 * [ 1, 2, 3, 4 ]
 */
/**
 * 对象分组
 */
const people = [
  {name: "zs", age: 18},
  {name: "ms", age: 18},
  {name: "ls", age: 19},
  {name: "qs", age: 18},
  {name: "us", age: 20}
]
const classification = (preRes, cur) => {
  if (!preRes[cur.age]) {
    preRes[cur.age] = [cur]
    return preRes
  } else {
    preRes[cur.age].push(cur)
    return preRes
  }
}
const peopleRes = people.reduce(classification, {})
console.log(peopleRes);
/**
{
  '18': [
    { name: 'zs', age: 18 },
    { name: 'ms', age: 18 },
    { name: 'qs', age: 18 }
  ],
  '19': [ { name: 'ls', age: 19 } ],
  '20': [ { name: 'us', age: 20 } ]
}
 */
/**
 * 数组去重
 */
const arr3 = [1,1,2,2,3,3,4,6,5,8,4,5,6]
const removeTheEqualNun = (preRes, curValue) => {
  if (!preRes.includes(curValue)) {
    preRes.push(curValue);
    return preRes
  } else {
    return preRes
  }
}
const res3 = arr3.reduce(removeTheEqualNun, []);
console.log(res3);
/**
[
  1, 2, 3, 4,
  6, 5, 8
]
 */

/**
 * 统计数组中各元素的出现次数
 */
const arr4 = ['one', 'two', 'two', 'three', 'three', 'three']

const computeTheCount = (preRes, curValue) => {
  preRes[curValue] = (preRes[curValue] || 0) + 1;
  return preRes
}
const res4 = arr4.reduce(computeTheCount, {})
console.log(res4);
/**
{ one: 1, two: 2, three: 3 }
 */