【问题标题】:How to return an object containing the total value for three different status如何返回包含三种不同状态总值的对象
【发布时间】:2021-06-29 12:16:24
【问题描述】:

我正在尝试创建一个函数来返回一个对象,该对象包含在 forEach 函数中进行的 reduce 的结果。这是一个获取用户所有购买的 API 调用,有三种可能的状态:“已批准”、“已批准”和“正在验证”

export function getPurchasesValueByStatus(id) {
  const allPurchasesStatusPossible = ["validacao", "aprovado", "reprovado"]

  allPurchasesStatusPossible.forEach(async (status) => {
    const response = await api.get(`/compras?userId=${id}&status=${status}`)
    const { data } = response

    const totalPerStatusObject = []
    if (data.lenght === 0) {
      console.log(`Nenhuma compra com status ${status}`)
    } else {
      const total = data.reduce((acc, curr) => acc + curr.value, 0)
      totalPerStatusObject.push({ status: total })
    }
    console.log(totalPerStatusObject)
  })
}

例如,状态“验证”的返回是这样的:

[
  {
    "id": 16,
    "code": "1231231",
    "value": 10,
    "dateOfPurchase": "2021-03-31",
    "status": "validacao",
    "userId": 3,
    "published_at": "2021-04-01T21:57:24.031Z",
    "created_at": "2021-04-01T21:57:24.034Z",
    "updated_at": "2021-04-01T21:57:24.034Z"
  },
  {
    "id": 19,
    "code": "242345",
    "value": 66,
    "dateOfPurchase": "2021-03-31",
    "status": "validacao",
    "userId": 3,
    "published_at": "2021-04-01T23:06:20.103Z",
    "created_at": "2021-04-01T23:06:20.106Z",
    "updated_at": "2021-04-01T23:06:20.106Z"
  },
  {
    "id": 20,
    "code": "55",
    "value": 100,
    "dateOfPurchase": "2021-03-30",
    "status": "validacao",
    "userId": 3,
    "published_at": "2021-04-01T23:11:06.648Z",
    "created_at": "2021-04-01T23:11:06.651Z",
    "updated_at": "2021-04-02T16:03:50.686Z"
  }
]

我想返回一个可以映射的对象或数组。

result = {
   validating: 10
   approved: 134
   reproved: 1235

}

【问题讨论】:

    标签: javascript arrays reactjs api


    【解决方案1】:

    const allPurchasesStatusPossible = ["validacao", "aprovado", "reprovado"];
    const data = [
      { value: 10, status: "validacao" },
      { value:  5, status: "validacao" },
      { value:  1, status: "aprovado"  },
      { value:  3, status: "reprovado" },
      { value:  4, status: "aprovado"  }
    ];
    
    // Create an obj which looks like { validacao: 0, aprovado: 0...}
    const totalPerStatusObject = allPurchasesStatusPossible
                     .reduce(
                       (acc, status) => Object.assign({}, acc, { [status]: 0 }),
                       {}
                     );
    // Add values
    data.forEach(o => totalPerStatusObject[o.status] += o.value);
    
    console.log(totalPerStatusObject); // { validacao: 15, aprovado: 5, reprovado: 3 }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 2013-11-28
      • 2011-03-28
      • 2016-03-25
      • 2012-01-14
      • 2020-11-13
      • 1970-01-01
      相关资源
      最近更新 更多