1

利用 reduce 进行数据优化

数组去重

没错,又是一个老生常谈的问题,数组去重,但是我们这次去除的不仅仅是单个的数据,而是拥有某个相同键值的对象集合。例如下面的例子,我们有以下的数据:

首先我们来看看一个老生常谈的问题,我们假设有这样的一个对象:

const data = [
      {
            name: "Kris",
            age: "24"
      },
      {
            name: "Andy",
            age: "25"
      },
      {
            name: "Kitty",
            age: "25"
      },
      {
            name: "Andy",
            age: "25"
      },
      {
            name: "Kitty",
            age: "25"
      },
      {
            name: "Andy",
            age: "25"
      },
      {
            name: "Kitty",
            age: "25"
      }

现在我们要去重里面name重复的对象,这时候我们可以利用reduce,例子如下:

const dataReducer = (prev, cur, idx) => {
      let obj = {}
      const { name } = cur
      obj[name] = cur
      return {
            ...prev,
            ...obj
      }
}
const reducedData = data.reduce(dataReducer, {});
let newData = Object.values(reducedData);
复制代码

批量生成对象元素

在实际业务中,有一个操作是需要对类似以下的对象进行操作的:

{
    a1: 'data',
    a2: 'data',
    ...,
    an: 'data'
}
复制代码

像我这么懒的,肯定不会一个个手写,所以就有了以下方法

const createList = (item, idx) => {
      let obj = {}
      obj[`a{idx}`] = "data"
      return obj
}
const listReducer = (acc, cur) => (!acc ? { ...cur } : { ...cur, ...acc })
const obj = Array.from(new Array(20), createList).reduce(listReducer)

Mrzxc
19 声望1 粉丝